From 4251f988dcaaed4f03296ef5649d89371e094cfd Mon Sep 17 00:00:00 2001
From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Date: Tue, 14 Mar 2017 11:22:33 +0100
Subject: [PATCH] Philippe 14/03/2017: IO: use TFILEDATA structure for
 diachronic files + use IO_WRITE_FIELD for several fields written in
 diachronic files

---
 src/LIB/SURCOUCHE/src/mode_field.f90 |  47 +-
 src/LIB/SURCOUCHE/src/mode_fm.f90    |   1 -
 src/MNH/diag.f90                     |  39 +-
 src/MNH/endstep_budget.f90           |  38 +-
 src/MNH/ini_modeln.f90               |  21 +-
 src/MNH/ini_spectren.f90             |  22 +-
 src/MNH/les_specn.f90                |  60 ++-
 src/MNH/menu_diachro.f90             |  23 +-
 src/MNH/modd_les.f90                 |   3 -
 src/MNH/modd_lunitn.f90              |   8 +-
 src/MNH/modd_refn.f90                |  12 +-
 src/MNH/mode_les_diachro.f90         |  56 ++-
 src/MNH/modeln.f90                   |  39 +-
 src/MNH/modules_diachro.f90          |  56 ++-
 src/MNH/write_aircraft_balloon.f90   |  19 +-
 src/MNH/write_budget.f90             |  94 ++--
 src/MNH/write_diachro.f90            |  96 ++--
 src/MNH/write_les_budgetn.f90        |  18 +-
 src/MNH/write_les_rt_budgetn.f90     |  25 +-
 src/MNH/write_les_sv_budgetn.f90     |  22 +-
 src/MNH/write_lesn.f90               | 685 ++++++++++++++-------------
 src/MNH/write_lfifmn_fordiachron.f90 | 375 +++------------
 src/MNH/write_profilern.f90          |  13 +-
 src/MNH/write_seriesn.f90            |  19 +-
 src/MNH/write_stationn.f90           |  13 +-
 25 files changed, 874 insertions(+), 930 deletions(-)

diff --git a/src/LIB/SURCOUCHE/src/mode_field.f90 b/src/LIB/SURCOUCHE/src/mode_field.f90
index cf38d78bd..b4053138e 100644
--- a/src/LIB/SURCOUCHE/src/mode_field.f90
+++ b/src/LIB/SURCOUCHE/src/mode_field.f90
@@ -1534,6 +1534,33 @@ IDX = IDX+1
 END IF ! CPROGRAM=MESONH
 !
 !
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'RHODREF'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: RHODREF'
+TFIELDLIST(IDX)%CUNITS     = 'kg m-3'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'Dry density for reference state with orography'
+TFIELDLIST(IDX)%NGRID      = 1
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 3
+ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL))
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'THVREF'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: THVREF'
+TFIELDLIST(IDX)%CUNITS     = 'K'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'Thetav for reference state with orography'
+TFIELDLIST(IDX)%NGRID      = 1
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 3
+ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL))
+IDX = IDX+1
+!
+!
 IF (CPROGRAM=='MESONH') THEN
 IF (CRAD /= 'NONE') THEN
 !
@@ -2065,6 +2092,7 @@ USE MODD_LSFIELD_n
 USE MODD_PARAM_n
 USE MODD_PRECIP_n
 USE MODD_RADIATIONS_n
+USE MODD_REF_n
 USE MODD_TIME_n
 USE MODD_TURB_n
 !
@@ -2149,6 +2177,11 @@ IF (CONF_MODEL(KFROM)%IDX_RHT>0) THEN
 END IF
 !
 IF (CPROGRAM == 'MESONH') THEN
+  !
+  CALL FIND_FIELD_ID_FROM_MNHNAME('US_PRES',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XRUS_PRES
+  CALL FIND_FIELD_ID_FROM_MNHNAME('VS_PRES',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XRVS_PRES
+  CALL FIND_FIELD_ID_FROM_MNHNAME('WS_PRES',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XRWS_PRES
+  CALL FIND_FIELD_ID_FROM_MNHNAME('THS_CLD',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XRTHS_CLD
   !
   CALL FIND_FIELD_ID_FROM_MNHNAME('RS_CLD',IID,IRESP); TFIELDLIST(IID)%TFIELD_X4D(KFROM)%DATA => XRRS_CLD
   !
@@ -2181,10 +2214,6 @@ IF (CPROGRAM == 'MESONH') THEN
     TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XRRS_CLD(:,:,:,CONF_MODEL(KFROM)%IDX_RHT)
   END IF
   !
-  CALL FIND_FIELD_ID_FROM_MNHNAME('US_PRES',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XRUS_PRES
-  CALL FIND_FIELD_ID_FROM_MNHNAME('VS_PRES',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XRVS_PRES
-  CALL FIND_FIELD_ID_FROM_MNHNAME('WS_PRES',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XRWS_PRES
-  CALL FIND_FIELD_ID_FROM_MNHNAME('THS_CLD',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XRTHS_CLD
 END IF
 !
 ! MODD_LSFIELD_n variables
@@ -2244,6 +2273,11 @@ END IF
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME('WTHVMF',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XWTHVMF
 !
+! MODD_REF_n variables
+!
+CALL FIND_FIELD_ID_FROM_MNHNAME('RHODREF',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XRHODREF
+CALL FIND_FIELD_ID_FROM_MNHNAME('THVREF', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XTHVREF
+!
 ! MODD_RADIATIONS_n variables
 !
 IF (CPROGRAM=='MESONH') THEN
@@ -2530,6 +2564,11 @@ CSURF => TFIELDLIST(IID)%TFIELD_C0D(KTO)%DATA
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME('WTHVMF',IID,IRESP); XWTHVMF => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
 !
+! MODD_REF_n variables
+!
+CALL FIND_FIELD_ID_FROM_MNHNAME('RHODREF',IID,IRESP); XRHODREF => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+CALL FIND_FIELD_ID_FROM_MNHNAME('THVREF', IID,IRESP); XTHVREF  => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+!
 ! MODD_RADIATIONS_n variables
 !
 IF (CPROGRAM=='MESONH') THEN
diff --git a/src/LIB/SURCOUCHE/src/mode_fm.f90 b/src/LIB/SURCOUCHE/src/mode_fm.f90
index 57fc85553..13ea018af 100644
--- a/src/LIB/SURCOUCHE/src/mode_fm.f90
+++ b/src/LIB/SURCOUCHE/src/mode_fm.f90
@@ -572,7 +572,6 @@ IF (ISP == TZFDLFI%OWNER) THEN
     YTRANS='fujitransfer.x'
 #endif
     IFITYP = TZFDLFI%PARAM%FITYP
-    PRINT *,'KTYPE=', IFITYP
     
     SELECT CASE (IFITYP)
     CASE(:-1)
diff --git a/src/MNH/diag.f90 b/src/MNH/diag.f90
index a172b73d0..7ee918dbe 100644
--- a/src/MNH/diag.f90
+++ b/src/MNH/diag.f90
@@ -172,10 +172,7 @@ TYPE(DATE_TIME)   :: TXDTBAL   ! current time and date for BALLOON and AIRCRAFT
 CHARACTER (LEN=28), DIMENSION(1) :: YINIFILE ! names of the INPUT FM-file
 CHARACTER (LEN=28), DIMENSION(1) :: YINIFILEPGD ! names of the INPUT FM-file
 CHARACTER (LEN=28) :: YFMFILE   ! name of the OUTPUT FM-file
-CHARACTER (LEN=28) :: YFMFILE_SUP   ! name of the OUTPUT FM-file for diag_sup
-CHARACTER (LEN=28) :: YFMDIAC   ! name of the OUTPUT Diachronic file
 CHARACTER (LEN=5)  :: YSUFFIX   ! character string for the OUTPUT FM-file number
-!CHARACTER (LEN=32) :: YDESFM    ! name of the desfm part of this FM-file
 CHARACTER (LEN=4)  :: YRAD      ! initial flag to call to radiation schemes
 CHARACTER (LEN=4)  :: YDCONV    ! initial flag to call to deep convection schemes
 CHARACTER (LEN=4)  :: YSCONV    ! initial flag to call to shallow convection schemes
@@ -188,7 +185,6 @@ REAL*8,DIMENSION(2)     :: ZTIME0,ZTIME1,ZTIME2,ZRAD,ZDCONV,ZSHADOWS,ZGROUND, &
 REAL*8,DIMENSION(2)     :: ZSTART,ZINIT,ZWRIT,ZBALL,ZPHYS,ZSURF,ZWRITS,ZTRAJ ! storing variables
 INTEGER :: INPRAR               ! number of articles predicted  in
                                 !  the LFIFM file
-INTEGER :: ITYPE=1              ! type of file (conv2dia and transfer)
 LOGICAL :: GCLOSE_OUT = .FALSE. ! conditional closure of the OUTPUT FM-file
 INTEGER :: ISTEPBAL   ! loop indice for balloons and aircraft
 INTEGER :: ILUNAM      ! Logical unit numbers for the namelist file
@@ -203,6 +199,7 @@ INTEGER :: IINFO_ll               ! return code for _ll routines
 REAL, DIMENSION(:,:),ALLOCATABLE          :: ZSEA,ZTOWN
 !
 TYPE(TFILEDATA),TARGET :: TZFILE
+TYPE(TFILEDATA)        :: TZDIACFILE
 !
 NAMELIST/NAM_DIAG/ CISO, LVAR_RS, LVAR_LS,   &
                    NCONV_KF, NRAD_3D, CRAD_SAT, NRTTOVINFO, LRAD_SUBG_COND,  &
@@ -468,7 +465,7 @@ ELSE
   CALL PRINT_MSG(NVERB_FATAL,'IO','DIAG','unknown backup/output fileformat')
 ENDIF
 TZFILE%CMODE      = 'WRITE'
-TZFILE%NLFITYPE   = ITYPE
+TZFILE%NLFITYPE   = 1
 TZFILE%NLFIVERB   = NVERB
 !
 CALL IO_FILE_OPEN_ll(TZFILE,CLUOUT,IRESP)
@@ -533,8 +530,28 @@ ZTIME1=ZTIME2
 !*       4.1    BALLOON and AIRCRAFT
 !
 IF ( LAIRCRAFT_BALLOON ) THEN
-  YFMDIAC=ADJUSTL(ADJUSTR(CINIFILE)//'BAL')
-  CALL FMOPEN_ll(YFMDIAC,'WRITE',CLUOUT,INPRAR,ITYPE,NVERB,INPRAR,IRESP)
+!
+  TZDIACFILE%CNAME = TRIM(CINIFILE)//'BAL'
+  TZDIACFILE%CTYPE = 'DIACHRONIC'
+  IF (LCDF4) THEN
+    IF (.NOT.LLFIOUT) THEN
+      TZDIACFILE%CFORMAT = 'NETCDF4'
+    ELSE
+      TZDIACFILE%CFORMAT = 'LFICDF4'
+      TZDIACFILE%NLFINPRAR = INPRAR
+    END IF
+  ELSE IF (LLFIOUT) THEN
+    TZDIACFILE%CFORMAT = 'LFI'
+    TZDIACFILE%NLFINPRAR = INPRAR
+  ELSE
+    CALL PRINT_MSG(NVERB_FATAL,'IO','DIAG','unknown backup/output fileformat')
+  ENDIF
+  TZDIACFILE%CMODE      = 'WRITE'
+  TZDIACFILE%NLFITYPE   = 1
+  TZDIACFILE%NLFIVERB   = NVERB
+!
+  CALL IO_FILE_OPEN_ll(TZDIACFILE,CLUOUT,IRESP)
+!
   WRITE(ILUOUT0,*) ' '
   WRITE(ILUOUT0,*) 'DIAG AFTER OPEN DIACHRONIC FILE'
   WRITE(ILUOUT0,*) ' '
@@ -570,10 +587,10 @@ IF ( LAIRCRAFT_BALLOON ) THEN
                           TXDTBAL%TDATE%DAY,  &
                           TXDTBAL%TIME        )
   ENDDO
-  CALL WRITE_LFIFMN_FORDIACHRO_n(YFMDIAC)
-  CALL WRITE_AIRCRAFT_BALLOON(YFMDIAC)
-  CALL MENU_DIACHRO(YFMDIAC,CLUOUT,'END')
-  CALL FMCLOS_ll(YFMDIAC,'KEEP',CLUOUT,IRESP)
+  CALL WRITE_LFIFMN_FORDIACHRO_n(TZDIACFILE)
+  CALL WRITE_AIRCRAFT_BALLOON(TZDIACFILE)
+  CALL MENU_DIACHRO(TZDIACFILE,CLUOUT,'END')
+  CALL IO_FILE_CLOSE_ll(TZDIACFILE,CLUOUT,IRESP)
   WRITE(ILUOUT0,*) ' '
   WRITE(ILUOUT0,*) 'DIAG AFTER CLOSE DIACHRONIC FILE'
   WRITE(ILUOUT0,*) ' '
diff --git a/src/MNH/endstep_budget.f90 b/src/MNH/endstep_budget.f90
index 4ad7716a0..74bd64b40 100644
--- a/src/MNH/endstep_budget.f90
+++ b/src/MNH/endstep_budget.f90
@@ -14,19 +14,19 @@
 !
 INTERFACE
 !
-      SUBROUTINE ENDSTEP_BUDGET(HFMDIAC,HLUOUT,KTCOUNT,              &
+      SUBROUTINE ENDSTEP_BUDGET(TPDIAFILE,HLUOUT,KTCOUNT,              &
                                TPDTCUR,TPDTMOD,PTSTEP,KSV            )
 !
+USE MODD_IO_ll, ONLY: TFILEDATA
 USE MODD_TYPE_DATE
 !
-CHARACTER (LEN=*), INTENT(IN) :: HFMDIAC    ! name of FM-file to write
+TYPE(TFILEDATA),   INTENT(IN) :: TPDIAFILE  ! file to write
 CHARACTER (LEN=*), INTENT(IN) :: HLUOUT     ! name of output listing
-INTEGER, INTENT(IN)            :: KTCOUNT    ! temporal loop counter
-TYPE (DATE_TIME),   INTENT(IN) :: TPDTCUR    ! Current date and time
-TYPE (DATE_TIME),   INTENT(IN) :: TPDTMOD    ! Creation date and time
-REAL,               INTENT(IN) :: PTSTEP     ! time step
-INTEGER,            INTENT(IN) :: KSV        ! Number of Scalar Variables
-
+INTEGER,           INTENT(IN) :: KTCOUNT    ! temporal loop counter
+TYPE (DATE_TIME),  INTENT(IN) :: TPDTCUR    ! Current date and time
+TYPE (DATE_TIME),  INTENT(IN) :: TPDTMOD    ! Creation date and time
+REAL,              INTENT(IN) :: PTSTEP     ! time step
+INTEGER,           INTENT(IN) :: KSV        ! Number of Scalar Variables
 !
 END SUBROUTINE ENDSTEP_BUDGET  
 !
@@ -35,7 +35,7 @@ END INTERFACE
 END MODULE MODI_ENDSTEP_BUDGET
 !
 !     ###############################################################
-      SUBROUTINE ENDSTEP_BUDGET(HFMDIAC,HLUOUT,KTCOUNT,             &
+      SUBROUTINE ENDSTEP_BUDGET(TPDIAFILE,HLUOUT,KTCOUNT,             &
                                TPDTCUR,TPDTMOD,PTSTEP,KSV           )
 !     ###############################################################
 !
@@ -106,6 +106,7 @@ END MODULE MODI_ENDSTEP_BUDGET
 !*       0.    DECLARATIONS
 !              ------------
 !
+USE MODD_IO_ll, ONLY: TFILEDATA
 USE MODD_TIME
 USE MODD_BUDGET
 !
@@ -116,14 +117,13 @@ IMPLICIT NONE
 !  
 !*       0.1   Declarations of arguments :
 !
-CHARACTER (LEN=*), INTENT(IN)  :: HFMDIAC    ! FM-file where the budget is to be
-                                             ! written
-CHARACTER (LEN=*), INTENT(IN)  :: HLUOUT     ! Name for output listing
-INTEGER, INTENT(IN)            :: KTCOUNT    ! temporal loop counter
-TYPE (DATE_TIME),   INTENT(IN) :: TPDTCUR    ! Current date and time
-TYPE (DATE_TIME),   INTENT(IN) :: TPDTMOD    ! Creation date and time
-REAL,               INTENT(IN) :: PTSTEP     ! time step 
-INTEGER,            INTENT(IN) :: KSV        ! Number of Scalar Variables
+TYPE(TFILEDATA),   INTENT(IN) :: TPDIAFILE  ! file to write
+CHARACTER (LEN=*), INTENT(IN) :: HLUOUT     ! name of output listing
+INTEGER,           INTENT(IN) :: KTCOUNT    ! temporal loop counter
+TYPE (DATE_TIME),  INTENT(IN) :: TPDTCUR    ! Current date and time
+TYPE (DATE_TIME),  INTENT(IN) :: TPDTMOD    ! Creation date and time
+REAL,              INTENT(IN) :: PTSTEP     ! time step
+INTEGER,           INTENT(IN) :: KSV        ! Number of Scalar Variables
 !
 !-------------------------------------------------------------------------------
 !
@@ -138,7 +138,7 @@ SELECT CASE(CBUTYPE)
 !*	 1.1    storage of the budget fields 
 !
     IF( MODULO(KTCOUNT,NBUSTEP*NBUWRNB) == 0 ) THEN  
-      CALL WRITE_BUDGET(HFMDIAC,HLUOUT,TPDTCUR,TPDTMOD,PTSTEP, KSV )
+      CALL WRITE_BUDGET(TPDIAFILE,HLUOUT,TPDTCUR,TPDTMOD,PTSTEP, KSV )
 !
 !*	 1.2    resetting the budget arrays to 0.
 !
@@ -174,7 +174,7 @@ SELECT CASE(CBUTYPE)
 !
 !*	 2.1    storage of the budget fields
 ! 
-      CALL WRITE_BUDGET(HFMDIAC,HLUOUT,TPDTCUR,TPDTMOD,PTSTEP, KSV)
+      CALL WRITE_BUDGET(TPDIAFILE,HLUOUT,TPDTCUR,TPDTMOD,PTSTEP, KSV)
 !
 !*	 2.2    reset the budget fields to 0.
 !
diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90
index 207a48a88..be57b8970 100644
--- a/src/MNH/ini_modeln.f90
+++ b/src/MNH/ini_modeln.f90
@@ -280,6 +280,7 @@ USE MODD_ARGSLIST_ll, ONLY : LIST_ll
 USE MODE_IO_ll
 USE MODE_FM
 USE MODE_FMREAD
+USE MODE_MSG
 USE MODE_TYPE_ZDIFFU
 !
 USE MODD_NSV
@@ -414,6 +415,7 @@ USE MODD_ADVFRC_n
 USE MODD_RELFRC_n
 USE MODD_2D_FRC
 USE MODD_IO_SURF_MNH, ONLY : IO_SURF_MNH_MODEL
+USE MODD_IO_ll,       ONLY : LIOCDF4,LLFIOUT
 !
 USE MODD_CH_PRODLOSSTOT_n
 USE MODI_CH_INIT_PRODLOSSTOT_n
@@ -1531,7 +1533,24 @@ CALL INI_BIKHARDT_n (NDXRATIO_ALL(KMI),NDYRATIO_ALL(KMI),KMI)
 IF (KMI == 1) THEN
   DO IMI = 1 , NMODEL
     WRITE(IO_SURF_MNH_MODEL(IMI)%COUTFILE,'(A,".",I1,".",A)') CEXP,IMI,TRIM(ADJUSTL(CSEG))
-    WRITE(LUNIT_MODEL(IMI)%CFMDIAC, '(A,".",I1,".",A)') CEXP,IMI,TRIM(ADJUSTL(CSEG))//'.000'
+    WRITE(LUNIT_MODEL(IMI)%TDIAFILE%CNAME, '(A,".",I1,".",A)') CEXP,IMI,TRIM(ADJUSTL(CSEG))//'.000'
+    LUNIT_MODEL(IMI)%TDIAFILE%CTYPE = 'DIACHRONIC'
+    IF (LIOCDF4) THEN
+      IF (.NOT.LLFIOUT) THEN
+        LUNIT_MODEL(IMI)%TDIAFILE%CFORMAT = 'NETCDF4'
+      ELSE
+        LUNIT_MODEL(IMI)%TDIAFILE%CFORMAT = 'LFICDF4'
+        LUNIT_MODEL(IMI)%TDIAFILE%NLFINPRAR = 50
+      END IF
+    ELSE IF (LLFIOUT) THEN
+      LUNIT_MODEL(IMI)%TDIAFILE%CFORMAT = 'LFI'
+      LUNIT_MODEL(IMI)%TDIAFILE%NLFINPRAR = 50
+    ELSE
+      CALL PRINT_MSG(NVERB_FATAL,'IO','INI_MODEL_n','unknown backup/output fileformat')
+    ENDIF
+    LUNIT_MODEL(IMI)%TDIAFILE%CMODE      = 'WRITE'
+    LUNIT_MODEL(IMI)%TDIAFILE%NLFITYPE   = 1
+    LUNIT_MODEL(IMI)%TDIAFILE%NLFIVERB   = NVERB
   END DO
   !
   IF (CPROGRAM=='MESONH') THEN
diff --git a/src/MNH/ini_spectren.f90 b/src/MNH/ini_spectren.f90
index 3aca74575..09d5f5a77 100644
--- a/src/MNH/ini_spectren.f90
+++ b/src/MNH/ini_spectren.f90
@@ -45,6 +45,7 @@ USE MODD_ARGSLIST_ll, ONLY : LIST_ll
 USE MODE_IO_ll
 USE MODE_FM
 USE MODE_FMREAD
+USE MODE_MSG
 USE MODE_TYPE_ZDIFFU
 !
 USE MODD_NSV
@@ -55,6 +56,7 @@ USE MODD_DUST
 USE MODD_DYN
 USE MODD_DYNZD
 USE MODD_FRC
+USE MODD_IO_ll, ONLY : LIOCDF4,LLFIOUT
 USE MODD_REF
 USE MODD_SERIES, ONLY: LSERIES
 USE MODD_TIME
@@ -943,7 +945,25 @@ END IF
 !               ----------------------------
 !
 WRITE(COUTFILE,'(A,".",I1,".",A)') CEXP,KMI,TRIM(ADJUSTL(CSEG))
-WRITE(CFMDIAC, '(A,".",I1,".",A)') CEXP,KMI,TRIM(ADJUSTL(CSEG))//'.000'
+WRITE(TDIAFILE%CNAME, '(A,".",I1,".",A)') CEXP,KMI,TRIM(ADJUSTL(CSEG))//'.000'
+TDIAFILE%CTYPE = 'DIACHRONIC'
+IF (LIOCDF4) THEN
+  IF (.NOT.LLFIOUT) THEN
+    TDIAFILE%CFORMAT = 'NETCDF4'
+  ELSE
+    TDIAFILE%CFORMAT = 'LFICDF4'
+    TDIAFILE%NLFINPRAR = 50
+  END IF
+ELSE IF (LLFIOUT) THEN
+  TDIAFILE%CFORMAT = 'LFI'
+  TDIAFILE%NLFINPRAR = 50
+ELSE
+  CALL PRINT_MSG(NVERB_FATAL,'IO','INI_SPECTRE_n','unknown backup/output fileformat')
+ENDIF
+TDIAFILE%CMODE      = 'WRITE'
+TDIAFILE%NLFITYPE   = 1
+TDIAFILE%NLFIVERB   = NVERB
+
 !-------------------------------------------------------------------------------
 !
 !*       17.    INITIALIZE THE PARAMETERS FOR THE DYNAMICS
diff --git a/src/MNH/les_specn.f90 b/src/MNH/les_specn.f90
index ff703bb0e..61f4aaa49 100644
--- a/src/MNH/les_specn.f90
+++ b/src/MNH/les_specn.f90
@@ -9,7 +9,13 @@
 ! MASDEV4_7 les 2006/08/30 18:41:37
 !-----------------------------------------------------------------
 !     ######################
-      SUBROUTINE LES_SPEC_n
+      MODULE MODE_LES_SPEC_n
+!     ######################
+!
+CONTAINS
+!
+!     ######################
+      SUBROUTINE LES_SPEC_n(TPDIAFILE)
 !     ######################
 !
 !
@@ -57,6 +63,7 @@ USE MODD_LES
 USE MODD_LES_n
 !
 USE MODD_CONF_n
+USE MODD_IO_ll, ONLY: TFILEDATA
 USE MODD_LUNIT_n
 USE MODD_GRID_n
 USE MODD_LBC_n, ONLY : CLBCX, CLBCY
@@ -75,6 +82,7 @@ IMPLICIT NONE
 !
 !*      0.1  declarations of arguments
 !
+TYPE(TFILEDATA), INTENT(IN) :: TPDIAFILE ! file to write
 !
 !*      0.2  declaration of local variables
 !
@@ -115,112 +123,112 @@ ALLOCATE( ZSPECTRAY(ISPECTRA_NJ,2,NSPECTRA_K,NLES_TIMES) )
 IF (NSPECTRA_K>0) THEN
   CALL LES_SPEC('X',XCORRi_UU,    ZSPECTRAX)
   CALL LES_SPEC('Y',XCORRj_UU,    ZSPECTRAY)
-  CALL LES_DIACHRO_SPEC("UU   ","U*U     spectra","m3/s2",ZSPECTRAX,ZSPECTRAY)
+  CALL LES_DIACHRO_SPEC(TPDIAFILE,"UU   ","U*U     spectra","m3/s2",ZSPECTRAX,ZSPECTRAY)
 !
   CALL LES_SPEC('X',XCORRi_VV,    ZSPECTRAX)
   CALL LES_SPEC('Y',XCORRj_VV,    ZSPECTRAY)
-  CALL LES_DIACHRO_SPEC("VV   ","V*V     spectra","m3/s2",ZSPECTRAX,ZSPECTRAY)
+  CALL LES_DIACHRO_SPEC(TPDIAFILE,"VV   ","V*V     spectra","m3/s2",ZSPECTRAX,ZSPECTRAY)
 !
   CALL LES_SPEC('X',XCORRi_WW,    ZSPECTRAX)
   CALL LES_SPEC('Y',XCORRj_WW,    ZSPECTRAY)
-  CALL LES_DIACHRO_SPEC("WW   ","W*W     spectra","m3/s2",ZSPECTRAX,ZSPECTRAY)
+  CALL LES_DIACHRO_SPEC(TPDIAFILE,"WW   ","W*W     spectra","m3/s2",ZSPECTRAX,ZSPECTRAY)
 !
   CALL LES_SPEC('X',XCORRi_UV,    ZSPECTRAX)
   CALL LES_SPEC('Y',XCORRj_UV,    ZSPECTRAY)
-  CALL LES_DIACHRO_SPEC("UV   ","U*V     spectra","m3/s2",ZSPECTRAX,ZSPECTRAY)
+  CALL LES_DIACHRO_SPEC(TPDIAFILE,"UV   ","U*V     spectra","m3/s2",ZSPECTRAX,ZSPECTRAY)
 !
   CALL LES_SPEC('X',XCORRi_WU,    ZSPECTRAX)
   CALL LES_SPEC('Y',XCORRj_WU,    ZSPECTRAY)
-  CALL LES_DIACHRO_SPEC("WU   ","W*U     spectra","m3/s2",ZSPECTRAX,ZSPECTRAY)
+  CALL LES_DIACHRO_SPEC(TPDIAFILE,"WU   ","W*U     spectra","m3/s2",ZSPECTRAX,ZSPECTRAY)
 !
   CALL LES_SPEC('X',XCORRi_WV,    ZSPECTRAX)
   CALL LES_SPEC('Y',XCORRj_WV,    ZSPECTRAY)
-  CALL LES_DIACHRO_SPEC("WV   ","W*V     spectra","m3/s2",ZSPECTRAX,ZSPECTRAY)
+  CALL LES_DIACHRO_SPEC(TPDIAFILE,"WV   ","W*V     spectra","m3/s2",ZSPECTRAX,ZSPECTRAY)
 !
   CALL LES_SPEC('X',XCORRi_ThTh,  ZSPECTRAX)
   CALL LES_SPEC('Y',XCORRj_ThTh,  ZSPECTRAY)
-  CALL LES_DIACHRO_SPEC("THTH ","Th*Th   spectra","mK2  ",ZSPECTRAX,ZSPECTRAY)
+  CALL LES_DIACHRO_SPEC(TPDIAFILE,"THTH ","Th*Th   spectra","mK2  ",ZSPECTRAX,ZSPECTRAY)
 !
   IF (LUSERC) THEN
     CALL LES_SPEC('X',XCORRi_ThlThl,  ZSPECTRAX)
     CALL LES_SPEC('Y',XCORRj_ThlThl,  ZSPECTRAY)
-    CALL LES_DIACHRO_SPEC("TLTL ","Thl*Thl spectra","mK2  ",ZSPECTRAX,ZSPECTRAY)
+    CALL LES_DIACHRO_SPEC(TPDIAFILE,"TLTL ","Thl*Thl spectra","mK2  ",ZSPECTRAX,ZSPECTRAY)
   END IF
 !
   CALL LES_SPEC('X',XCORRi_WTh,  ZSPECTRAX)
   CALL LES_SPEC('Y',XCORRj_WTh,  ZSPECTRAY)
-  CALL LES_DIACHRO_SPEC("WTH  ","W*Th    spectra","m2K/s",ZSPECTRAX,ZSPECTRAY)
+  CALL LES_DIACHRO_SPEC(TPDIAFILE,"WTH  ","W*Th    spectra","m2K/s",ZSPECTRAX,ZSPECTRAY)
 !
   IF (LUSERC) THEN
     CALL LES_SPEC('X',XCORRi_WThl,  ZSPECTRAX)
     CALL LES_SPEC('Y',XCORRj_WThl,  ZSPECTRAY)
-    CALL LES_DIACHRO_SPEC("WTHL ","W*Thl   spectra","m2K/s",ZSPECTRAX,ZSPECTRAY)
+    CALL LES_DIACHRO_SPEC(TPDIAFILE,"WTHL ","W*Thl   spectra","m2K/s",ZSPECTRAX,ZSPECTRAY)
   END IF
   !
   IF (LUSERV) THEN
     CALL LES_SPEC('X',XCORRi_RvRv,  ZSPECTRAX)
     CALL LES_SPEC('Y',XCORRj_RvRv,  ZSPECTRAY)
-    CALL LES_DIACHRO_SPEC("RVRV ","rv*rv   spectra","m    ",ZSPECTRAX,ZSPECTRAY)
+    CALL LES_DIACHRO_SPEC(TPDIAFILE,"RVRV ","rv*rv   spectra","m    ",ZSPECTRAX,ZSPECTRAY)
     !
     CALL LES_SPEC('X',XCORRi_ThRv,  ZSPECTRAX)
     CALL LES_SPEC('Y',XCORRj_ThRv,  ZSPECTRAY)
-    CALL LES_DIACHRO_SPEC("THRV ","th*rv   spectra","Km   ",ZSPECTRAX,ZSPECTRAY)
+    CALL LES_DIACHRO_SPEC(TPDIAFILE,"THRV ","th*rv   spectra","Km   ",ZSPECTRAX,ZSPECTRAY)
     !
     IF (LUSERC) THEN
       CALL LES_SPEC('X',XCORRi_ThlRv,  ZSPECTRAX)
       CALL LES_SPEC('Y',XCORRj_ThlRv,  ZSPECTRAY)
-      CALL LES_DIACHRO_SPEC("TLRV ","thl*rv  spectra","Km   ",ZSPECTRAX,ZSPECTRAY)
+      CALL LES_DIACHRO_SPEC(TPDIAFILE,"TLRV ","thl*rv  spectra","Km   ",ZSPECTRAX,ZSPECTRAY)
     END IF
     !
     CALL LES_SPEC('X',XCORRi_WRv,  ZSPECTRAX)
     CALL LES_SPEC('Y',XCORRj_WRv,  ZSPECTRAY)
-    CALL LES_DIACHRO_SPEC("WRV ","W*rv     spectra","mK/s ",ZSPECTRAX,ZSPECTRAY)
+    CALL LES_DIACHRO_SPEC(TPDIAFILE,"WRV ","W*rv     spectra","mK/s ",ZSPECTRAX,ZSPECTRAY)
   END IF
   IF (LUSERC) THEN
     CALL LES_SPEC('X',XCORRi_RcRc,  ZSPECTRAX)
     CALL LES_SPEC('Y',XCORRj_RcRc,  ZSPECTRAY)
-    CALL LES_DIACHRO_SPEC("RCRC ","rc*rc   spectra","m    ",ZSPECTRAX,ZSPECTRAY)
+    CALL LES_DIACHRO_SPEC(TPDIAFILE,"RCRC ","rc*rc   spectra","m    ",ZSPECTRAX,ZSPECTRAY)
     !
     CALL LES_SPEC('X',XCORRi_ThRc,  ZSPECTRAX)
     CALL LES_SPEC('Y',XCORRj_ThRc,  ZSPECTRAY)
-    CALL LES_DIACHRO_SPEC("THRC ","th*rc   spectra","Km   ",ZSPECTRAX,ZSPECTRAY)
+    CALL LES_DIACHRO_SPEC(TPDIAFILE,"THRC ","th*rc   spectra","Km   ",ZSPECTRAX,ZSPECTRAY)
     !
     CALL LES_SPEC('X',XCORRi_ThlRc,  ZSPECTRAX)
     CALL LES_SPEC('Y',XCORRj_ThlRc,  ZSPECTRAY)
-    CALL LES_DIACHRO_SPEC("TLRC ","thl*rc  spectra","Km   ",ZSPECTRAX,ZSPECTRAY)
+    CALL LES_DIACHRO_SPEC(TPDIAFILE,"TLRC ","thl*rc  spectra","Km   ",ZSPECTRAX,ZSPECTRAY)
     !
     CALL LES_SPEC('X',XCORRi_WRc,  ZSPECTRAX)
     CALL LES_SPEC('Y',XCORRj_WRc,  ZSPECTRAY)
-    CALL LES_DIACHRO_SPEC("WRC ","W*rc     spectra","mK/s ",ZSPECTRAX,ZSPECTRAY)
+    CALL LES_DIACHRO_SPEC(TPDIAFILE,"WRC ","W*rc     spectra","mK/s ",ZSPECTRAX,ZSPECTRAY)
   END IF
   IF (LUSERI) THEN
     CALL LES_SPEC('X',XCORRi_RiRi,  ZSPECTRAX)
     CALL LES_SPEC('Y',XCORRj_RiRi,  ZSPECTRAY)
-    CALL LES_DIACHRO_SPEC("RIRI ","ri*ri   spectra","m    ",ZSPECTRAX,ZSPECTRAY)
+    CALL LES_DIACHRO_SPEC(TPDIAFILE,"RIRI ","ri*ri   spectra","m    ",ZSPECTRAX,ZSPECTRAY)
     !
     CALL LES_SPEC('X',XCORRi_ThRi,  ZSPECTRAX)
     CALL LES_SPEC('Y',XCORRj_ThRi,  ZSPECTRAY)
-    CALL LES_DIACHRO_SPEC("THRI ","th*ri   spectra","Km   ",ZSPECTRAX,ZSPECTRAY)
+    CALL LES_DIACHRO_SPEC(TPDIAFILE,"THRI ","th*ri   spectra","Km   ",ZSPECTRAX,ZSPECTRAY)
     !
     CALL LES_SPEC('X',XCORRi_ThlRi,  ZSPECTRAX)
     CALL LES_SPEC('Y',XCORRj_ThlRi,  ZSPECTRAY)
-    CALL LES_DIACHRO_SPEC("TLRI ","thl*ri  spectra","Km   ",ZSPECTRAX,ZSPECTRAY)
+    CALL LES_DIACHRO_SPEC(TPDIAFILE,"TLRI ","thl*ri  spectra","Km   ",ZSPECTRAX,ZSPECTRAY)
     !
     CALL LES_SPEC('X',XCORRi_WRi,  ZSPECTRAX)
     CALL LES_SPEC('Y',XCORRj_WRi,  ZSPECTRAY)
-    CALL LES_DIACHRO_SPEC("WRI ","W*ri     spectra","mK/s ",ZSPECTRAX,ZSPECTRAY)
+    CALL LES_DIACHRO_SPEC(TPDIAFILE,"WRI ","W*ri     spectra","mK/s ",ZSPECTRAX,ZSPECTRAY)
   END IF
   DO JSV=1,NSV
     WRITE (YGROUP,FMT="(A2,I3.3)") "SS",JSV
     CALL LES_SPEC('X',XCORRi_SvSv(:,:,:,JSV),  ZSPECTRAX)
     CALL LES_SPEC('Y',XCORRj_SvSv(:,:,:,JSV),  ZSPECTRAY)
-    CALL LES_DIACHRO_SPEC(YGROUP,"Sv*Sv    spectra","m    ",ZSPECTRAX,ZSPECTRAY)
+    CALL LES_DIACHRO_SPEC(TPDIAFILE,YGROUP,"Sv*Sv    spectra","m    ",ZSPECTRAX,ZSPECTRAY)
   END DO
   DO JSV=1,NSV
     WRITE (YGROUP,FMT="(A2,I3.3)") "WS",JSV
     CALL LES_SPEC('X',XCORRi_WSv(:,:,:,JSV),  ZSPECTRAX)
     CALL LES_SPEC('Y',XCORRj_WSv(:,:,:,JSV),  ZSPECTRAY)
-    CALL LES_DIACHRO_SPEC(YGROUP,"W*Sv    spectra","m2/s  ",ZSPECTRAX,ZSPECTRAY)
+    CALL LES_DIACHRO_SPEC(TPDIAFILE,YGROUP,"W*Sv    spectra","m2/s  ",ZSPECTRAX,ZSPECTRAY)
   END DO
 END IF
 !
@@ -296,3 +304,5 @@ END SUBROUTINE LES_SPEC
 !------------------------------------------------------------------------------
 !
 END SUBROUTINE LES_SPEC_n
+
+END MODULE MODE_LES_SPEC_n
diff --git a/src/MNH/menu_diachro.f90 b/src/MNH/menu_diachro.f90
index c222f2a54..d58d2c323 100644
--- a/src/MNH/menu_diachro.f90
+++ b/src/MNH/menu_diachro.f90
@@ -9,7 +9,7 @@
 ! MASDEV4_7 diachro 2006/05/18 13:07:25
 !-----------------------------------------------------------------
 !     ##################################################
-      SUBROUTINE MENU_DIACHRO(HFILEDIA,HLUOUTDIA,HGROUP)
+      SUBROUTINE MENU_DIACHRO(TPDIAFILE,HLUOUTDIA,HGROUP)
 !     ##################################################
 !
 !!****  *MENU_DIACHRO* - Creation, ecriture (eventuellement lecture) de
@@ -57,18 +57,19 @@
 !*       0.    DECLARATIONS
 !              ------------
 !
-
+USE MODD_IO_ll, ONLY: TFILEDATA
 USE MODE_FMREAD
 USE MODE_FMWRIT
 USE MODD_CONF
-
+!
 IMPLICIT NONE
 !
 !*       0.1   Dummy arguments
 !              ---------------
 
-CHARACTER(LEN=*) :: HGROUP
-CHARACTER(LEN=*) :: HFILEDIA, HLUOUTDIA
+TYPE(TFILEDATA),  INTENT(IN) :: TPDIAFILE    ! file to write
+CHARACTER(LEN=*), INTENT(IN) :: HGROUP
+CHARACTER(LEN=*), INTENT(IN) :: HLUOUTDIA
 !
 !*       0.1   Local variables
 !              ---------------
@@ -77,12 +78,16 @@ CHARACTER(LEN=*) :: HFILEDIA, HLUOUTDIA
 CHARACTER(LEN=16) :: YRECFM
 CHARACTER(LEN=20) :: YCOMMENT
 CHARACTER(LEN=16),DIMENSION(1500),SAVE    :: YGROUP
+CHARACTER(LEN=28) :: YFILEDIA
 INTEGER   ::   ILENG, ILENCH, IGRID, J, JJ, IALREADY
 INTEGER   ::   IRESPDIA
 INTEGER,SAVE   ::   IGROUP=0
 INTEGER,DIMENSION(:),ALLOCATABLE :: ITABCHAR
 LOGICAL   ::   GPACK
 !------------------------------------------------------------------------------
+!
+YFILEDIA = TPDIAFILE%CNAME
+!
 GPACK=LPACK
 LPACK=.FALSE.
 YCOMMENT='Nothing'
@@ -98,7 +103,7 @@ IF(HGROUP == 'END')THEN
   ILENG=16*IGROUP
   ILENCH=LEN(YCOMMENT)
   YRECFM='MENU_BUDGET.DIM'
-  CALL FMWRIT(HFILEDIA,YRECFM,HLUOUTDIA,'--',ILENG,&
+  CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',ILENG,&
   IGRID,ILENCH,YCOMMENT,IRESPDIA)
 
   YRECFM='MENU_BUDGET'
@@ -108,14 +113,14 @@ IF(HGROUP == 'END')THEN
       ITABCHAR(16*(JJ-1)+J) = ICHAR(YGROUP(JJ)(J:J))
     ENDDO
   ENDDO
-  CALL FMWRIT(HFILEDIA,YRECFM,HLUOUTDIA,'--',ITABCHAR, &
+  CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',ITABCHAR, &
   IGRID,ILENCH,YCOMMENT,IRESPDIA)
   DEALLOCATE(ITABCHAR)
 
 ELSE IF(HGROUP == 'READ')THEN
 
   YRECFM='MENU_BUDGET.DIM'
-  CALL FMREAD(HFILEDIA,YRECFM,HLUOUTDIA,'--',ILENG,&
+  CALL FMREAD(YFILEDIA,YRECFM,HLUOUTDIA,'--',ILENG,&
   IGRID,ILENCH,YCOMMENT,IRESPDIA)
   IF(IRESPDIA == -47)THEN
 !   print *,' No record MENU_BUDGET '
@@ -125,7 +130,7 @@ ELSE IF(HGROUP == 'READ')THEN
 
   ALLOCATE(ITABCHAR(ILENG))
   YRECFM='MENU_BUDGET'
-  CALL FMREAD(HFILEDIA,YRECFM,HLUOUTDIA,'--',ITABCHAR, &
+  CALL FMREAD(YFILEDIA,YRECFM,HLUOUTDIA,'--',ITABCHAR, &
   IGRID,ILENCH,YCOMMENT,IRESPDIA)
   IGROUP=ILENG/16
 ! print *,' ILENG ILENCH IGROUP ',ILENG,ILENCH,IGROUP
diff --git a/src/MNH/modd_les.f90 b/src/MNH/modd_les.f90
index 824ceeb2c..d13a5ff3c 100644
--- a/src/MNH/modd_les.f90
+++ b/src/MNH/modd_les.f90
@@ -176,9 +176,6 @@ INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: NKLIN_CURRENT_SPEC
 REAL, DIMENSION(:,:,:), ALLOCATABLE :: XCOEFLIN_CURRENT_SPEC
 ! coefficients for vertical interpolation
 !
-CHARACTER(LEN=28) :: CCURRENT_FMDIAC
-! current CFMDIAC file
-!
 REAL,DIMENSION(2) :: XTIME_LES
 ! time spent in subgrid LES computations in this time-step in TURB
 !
diff --git a/src/MNH/modd_lunitn.f90 b/src/MNH/modd_lunitn.f90
index e83bdd42d..af4559b63 100644
--- a/src/MNH/modd_lunitn.f90
+++ b/src/MNH/modd_lunitn.f90
@@ -45,7 +45,9 @@
 !             ------------
 !
 !
+USE MODD_IO_ll,      ONLY: TFILEDATA
 USE MODD_PARAMETERS, ONLY: JPMODELMAX, JPCPLFILEMAX 
+
 IMPLICIT NONE
 
 TYPE LUNIT_t
@@ -53,7 +55,7 @@ TYPE LUNIT_t
   CHARACTER(LEN=28) :: CINIFILE      ! Name of the input FM-file
   CHARACTER(LEN=28) :: CINIFILEPGD   ! Name of the PGD associated to input FM-file  
   CHARACTER(LEN=24) :: COUTFILE      ! Generic name of the output FM-files
-  CHARACTER(LEN=28) :: CFMDIAC       ! diachronic output FM-file 
+  TYPE(TFILEDATA)   :: TDIAFILE      ! diachronic output file 
 !
   CHARACTER(LEN=16) :: CLUOUT        ! Name of output_listing file
 !JUAN
@@ -70,7 +72,7 @@ CHARACTER(LEN=4),SAVE :: CMASK_SURFEX='PREP'
 CHARACTER(LEN=28), POINTER :: CINIFILE=>NULL()
 CHARACTER(LEN=28), POINTER :: CINIFILEPGD=>NULL()
 CHARACTER(LEN=24), POINTER :: COUTFILE=>NULL()
-CHARACTER(LEN=28), POINTER :: CFMDIAC=>NULL()
+TYPE(TFILEDATA),   POINTER :: TDIAFILE=>NULL()
 CHARACTER(LEN=16), POINTER :: CLUOUT=>NULL()
 CHARACTER(LEN=28),DIMENSION(:), POINTER :: CCPLFILE=>NULL()
 
@@ -92,7 +94,7 @@ ENDIF
 CINIFILE=>LUNIT_MODEL(KTO)%CINIFILE
 CINIFILEPGD=>LUNIT_MODEL(KTO)%CINIFILEPGD
 COUTFILE=>LUNIT_MODEL(KTO)%COUTFILE
-CFMDIAC=>LUNIT_MODEL(KTO)%CFMDIAC
+TDIAFILE=>LUNIT_MODEL(KTO)%TDIAFILE
 CLUOUT=>LUNIT_MODEL(KTO)%CLUOUT
 CCPLFILE=>LUNIT_MODEL(KTO)%CCPLFILE
 
diff --git a/src/MNH/modd_refn.f90 b/src/MNH/modd_refn.f90
index 3f3a72eae..56db08ddb 100644
--- a/src/MNH/modd_refn.f90
+++ b/src/MNH/modd_refn.f90
@@ -50,8 +50,8 @@ IMPLICIT NONE
 
 TYPE REF_t
 !          
-  REAL, DIMENSION(:,:,:), POINTER :: XRHODREF=>NULL()! dry density for ref. state 
-  REAL, DIMENSION(:,:,:), POINTER :: XTHVREF=>NULL() ! Thetav for ref. state 
+!  REAL, DIMENSION(:,:,:), POINTER :: XRHODREF=>NULL()! dry density for ref. state 
+!  REAL, DIMENSION(:,:,:), POINTER :: XTHVREF=>NULL() ! Thetav for ref. state 
   REAL, DIMENSION(:,:,:), POINTER :: XRVREF=>NULL()  ! mixing Ratio for Vapor computed
                                                     ! for the REFerence state
   REAL, DIMENSION(:,:,:), POINTER :: XEXNREF=>NULL() ! Exner function for ref. state 
@@ -83,15 +83,15 @@ SUBROUTINE REF_GOTO_MODEL(KFROM, KTO)
 INTEGER, INTENT(IN) :: KFROM, KTO
 !
 ! Save current state for allocated arrays
-REF_MODEL(KFROM)%XRHODREF=>XRHODREF
-REF_MODEL(KFROM)%XTHVREF=>XTHVREF
+!REF_MODEL(KFROM)%XRHODREF=>XRHODREF !Done in FIELDLIST_GOTO_MODEL
+!REF_MODEL(KFROM)%XTHVREF=>XTHVREF !Done in FIELDLIST_GOTO_MODEL
 REF_MODEL(KFROM)%XRVREF=>XRVREF
 REF_MODEL(KFROM)%XEXNREF=>XEXNREF
 REF_MODEL(KFROM)%XRHODJ=>XRHODJ
 !
 ! Current model is set to model KTO
-XRHODREF=>REF_MODEL(KTO)%XRHODREF
-XTHVREF=>REF_MODEL(KTO)%XTHVREF
+!XRHODREF=>REF_MODEL(KTO)%XRHODREF !Done in FIELDLIST_GOTO_MODEL
+!XTHVREF=>REF_MODEL(KTO)%XTHVREF !Done in FIELDLIST_GOTO_MODEL
 XRVREF=>REF_MODEL(KTO)%XRVREF
 XEXNREF=>REF_MODEL(KTO)%XEXNREF
 XRHODJ=>REF_MODEL(KTO)%XRHODJ
diff --git a/src/MNH/mode_les_diachro.f90 b/src/MNH/mode_les_diachro.f90
index 94e451102..ac9dcc168 100644
--- a/src/MNH/mode_les_diachro.f90
+++ b/src/MNH/mode_les_diachro.f90
@@ -733,9 +733,10 @@ END SUBROUTINE LES_TIME_AVG
 !------------------------------------------------------------------------------
 !
 !########################################################
-SUBROUTINE LES_DIACHRO(HGROUP,HCOMMENT,HUNIT,PFIELD,HAVG)
+SUBROUTINE LES_DIACHRO(TPDIAFILE,HGROUP,HCOMMENT,HUNIT,PFIELD,HAVG)
 !########################################################
 !
+USE MODD_IO_ll, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_GRID
 USE MODI_WRITE_DIACHRO
@@ -745,6 +746,7 @@ IMPLICIT NONE
 !
 !*      0.1  declarations of arguments
 !
+TYPE(TFILEDATA),      INTENT(IN)       :: TPDIAFILE! file to write
 CHARACTER(LEN=*),     INTENT(IN)       :: HGROUP   ! group title
 CHARACTER(LEN=*),     INTENT(IN)       :: HCOMMENT ! comment string
 CHARACTER(LEN=*),     INTENT(IN)       :: HUNIT    ! physical unit
@@ -839,7 +841,7 @@ YTITLE(1) = YGROUP
 !            ----------------------
 !
 IF (IRESP==0 .AND. ANY(ZWORK6/=XUNDEF)) &
-CALL WRITE_DIACHRO(CCURRENT_FMDIAC,CLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6,     &
+CALL WRITE_DIACHRO(TPDIAFILE,CLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6,     &
                    ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE.,   &
                    IIL,IIH,IJL,IJH,IKL,IKH,                                    &
                    PTRAJX=ZTRAJX,PTRAJY=ZTRAJY,PTRAJZ=ZTRAJZ                   )
@@ -859,9 +861,10 @@ DEALLOCATE (ZDATIME)
 END SUBROUTINE LES_DIACHRO
 !-------------------------------------------------------------------------------
 !###########################################################
-SUBROUTINE LES_DIACHRO_SV(HGROUP,HCOMMENT,HUNIT,PFIELD,HAVG)
+SUBROUTINE LES_DIACHRO_SV(TPDIAFILE,HGROUP,HCOMMENT,HUNIT,PFIELD,HAVG)
 !###########################################################
 !
+USE MODD_IO_ll, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_GRID
 USE MODI_WRITE_DIACHRO
@@ -871,6 +874,7 @@ IMPLICIT NONE
 !
 !*      0.1  declarations of arguments
 !
+TYPE(TFILEDATA),        INTENT(IN)       :: TPDIAFILE! file to write
 CHARACTER(LEN=*),       INTENT(IN)       :: HGROUP   ! group title
 CHARACTER(LEN=*),       INTENT(IN)       :: HCOMMENT ! comment string
 CHARACTER(LEN=*),       INTENT(IN)       :: HUNIT    ! physical unit
@@ -963,7 +967,7 @@ YTITLE(1) = YGROUP
 !
 !
 IF (IRESP==0 .AND. ANY(ZWORK6/=XUNDEF)) &
-CALL WRITE_DIACHRO(CCURRENT_FMDIAC,CLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6,     &
+CALL WRITE_DIACHRO(TPDIAFILE,CLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6,     &
                    ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE.,   &
                    IIL,IIH,IJL,IJH,IKL,IKH,                                    &
                    PTRAJX=ZTRAJX,PTRAJY=ZTRAJY,PTRAJZ=ZTRAJZ                   )
@@ -983,9 +987,10 @@ DEALLOCATE(ZDATIME)
 END SUBROUTINE LES_DIACHRO_SV
 !-------------------------------------------------------------------------------
 !#####################################################################
-SUBROUTINE LES_DIACHRO_MASKS(HGROUP,HTITLE,HCOMMENT,HUNIT,PFIELD,HAVG)
+SUBROUTINE LES_DIACHRO_MASKS(TPDIAFILE,HGROUP,HTITLE,HCOMMENT,HUNIT,PFIELD,HAVG)
 !#####################################################################
 !
+USE MODD_IO_ll, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_GRID
 USE MODI_WRITE_DIACHRO
@@ -995,6 +1000,7 @@ IMPLICIT NONE
 !
 !*      0.1  declarations of arguments
 !
+TYPE(TFILEDATA),                    INTENT(IN) :: TPDIAFILE! file to write
 CHARACTER(LEN=*),                   INTENT(IN) :: HGROUP   ! group title
 CHARACTER(LEN=*), DIMENSION(:),     INTENT(IN) :: HTITLE   ! title
 CHARACTER(LEN=*), DIMENSION(:),     INTENT(IN) :: HCOMMENT ! comment string
@@ -1092,7 +1098,7 @@ YTITLE  (:) = YGROUP//HTITLE(:)
 !            ----------------------
 !
 IF (IRESP==0 .AND. ANY(ZWORK6/=XUNDEF)) &
-CALL WRITE_DIACHRO(CCURRENT_FMDIAC,CLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6,     &
+CALL WRITE_DIACHRO(TPDIAFILE,CLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6,     &
                    ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE.,   &
                    IIL,IIH,IJL,IJH,IKL,IKH,                                    &
                    PTRAJX=ZTRAJX,PTRAJY=ZTRAJY,PTRAJZ=ZTRAJZ                   )
@@ -1112,9 +1118,10 @@ DEALLOCATE(ZDATIME)
 END SUBROUTINE LES_DIACHRO_MASKS
 !-------------------------------------------------------------------------------
 !########################################################################
-SUBROUTINE LES_DIACHRO_SV_MASKS(HGROUP,HTITLE,HCOMMENT,HUNIT,PFIELD,HAVG)
+SUBROUTINE LES_DIACHRO_SV_MASKS(TPDIAFILE,HGROUP,HTITLE,HCOMMENT,HUNIT,PFIELD,HAVG)
 !########################################################################
 !
+USE MODD_IO_ll, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_GRID
 USE MODI_WRITE_DIACHRO
@@ -1124,6 +1131,7 @@ IMPLICIT NONE
 !
 !*      0.1  declarations of arguments
 !
+TYPE(TFILEDATA),                      INTENT(IN) :: TPDIAFILE! file to write
 CHARACTER(LEN=*),                     INTENT(IN) :: HGROUP   ! group title
 CHARACTER(LEN=*), DIMENSION(:),       INTENT(IN) :: HTITLE   ! title
 CHARACTER(LEN=*), DIMENSION(:),       INTENT(IN) :: HCOMMENT ! comment string
@@ -1225,7 +1233,7 @@ YTITLE  (:) = YGROUP//HTITLE(:)
 !
 !
 IF (IRESP==0 .AND. ANY(ZWORK6/=XUNDEF)) &
-CALL WRITE_DIACHRO(CCURRENT_FMDIAC,CLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6,     &
+CALL WRITE_DIACHRO(TPDIAFILE,CLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6,     &
                    ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE.,   &
                    IIL,IIH,IJL,IJH,IKL,IKH,                                    &
                    PTRAJX=ZTRAJX,PTRAJY=ZTRAJY,PTRAJZ=ZTRAJZ                   )
@@ -1246,9 +1254,10 @@ END SUBROUTINE LES_DIACHRO_SV_MASKS
 !-------------------------------------------------------------------------------
 
 !#############################################################
-SUBROUTINE LES_DIACHRO_SURF(HGROUP,HCOMMENT,HUNIT,PFIELD,HAVG)
+SUBROUTINE LES_DIACHRO_SURF(TPDIAFILE,HGROUP,HCOMMENT,HUNIT,PFIELD,HAVG)
 !#############################################################
 !
+USE MODD_IO_ll, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_GRID
 USE MODI_WRITE_DIACHRO
@@ -1258,6 +1267,7 @@ IMPLICIT NONE
 !
 !*      0.1  declarations of arguments
 !
+TYPE(TFILEDATA),      INTENT(IN)       :: TPDIAFILE! file to write
 CHARACTER(LEN=*),     INTENT(IN)       :: HGROUP   ! group title
 CHARACTER(LEN=*),     INTENT(IN)       :: HCOMMENT ! comment string
 CHARACTER(LEN=*),     INTENT(IN)       :: HUNIT    ! physical unit
@@ -1338,7 +1348,7 @@ YTITLE(1) = HGROUP
 !            ----------------------
 !
 IF (IRESP==0) &
-CALL WRITE_DIACHRO(CCURRENT_FMDIAC,CLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6,     &
+CALL WRITE_DIACHRO(TPDIAFILE,CLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6,     &
                    ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE.,   &
                    IIL,IIH,IJL,IJH,IKL,IKH,                                    &
                    PTRAJX=ZTRAJX,PTRAJY=ZTRAJY,PTRAJZ=ZTRAJZ                   )
@@ -1358,9 +1368,10 @@ DEALLOCATE(ZDATIME)
 END SUBROUTINE LES_DIACHRO_SURF
 !-------------------------------------------------------------------------------
 !################################################################
-SUBROUTINE LES_DIACHRO_SURF_SV(HGROUP,HCOMMENT,HUNIT,PFIELD,HAVG)
+SUBROUTINE LES_DIACHRO_SURF_SV(TPDIAFILE,HGROUP,HCOMMENT,HUNIT,PFIELD,HAVG)
 !################################################################
 !
+USE MODD_IO_ll, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_GRID
 USE MODI_WRITE_DIACHRO
@@ -1370,6 +1381,7 @@ IMPLICIT NONE
 !
 !*      0.1  declarations of arguments
 !
+TYPE(TFILEDATA),        INTENT(IN)       :: TPDIAFILE! file to write
 CHARACTER(LEN=*),       INTENT(IN)       :: HGROUP   ! group title
 CHARACTER(LEN=*),       INTENT(IN)       :: HCOMMENT ! comment string
 CHARACTER(LEN=*),       INTENT(IN)       :: HUNIT    ! physical unit
@@ -1451,7 +1463,7 @@ YTITLE(1) = HGROUP
 !            ----------------------
 !
 IF (IRESP==0) &
-CALL WRITE_DIACHRO(CCURRENT_FMDIAC,CLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6,     &
+CALL WRITE_DIACHRO(TPDIAFILE,CLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6,     &
                    ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE.,   &
                    IIL,IIH,IJL,IJH,IKL,IKH,                                    &
                    PTRAJX=ZTRAJX,PTRAJY=ZTRAJY,PTRAJZ=ZTRAJZ                   )
@@ -1471,12 +1483,13 @@ DEALLOCATE(ZDATIME)
 END SUBROUTINE LES_DIACHRO_SURF_SV
 !-------------------------------------------------------------------------------
 !#####################################################################
-SUBROUTINE LES_DIACHRO_2PT(HGROUP,HCOMMENT,HUNIT,PFIELDX,PFIELDY,HAVG)
+SUBROUTINE LES_DIACHRO_2PT(TPDIAFILE,HGROUP,HCOMMENT,HUNIT,PFIELDX,PFIELDY,HAVG)
 !#####################################################################
 !
 !* Modification 01/04/03 (V. Masson) safer use of ZWORK6 with loops
 !
 !
+USE MODD_IO_ll, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_GRID
 USE MODD_CONF
@@ -1487,6 +1500,7 @@ IMPLICIT NONE
 !
 !*      0.1  declarations of arguments
 !
+TYPE(TFILEDATA),                    INTENT(IN) :: TPDIAFILE! file to write
 CHARACTER(LEN=*),                   INTENT(IN) :: HGROUP   ! group title
 CHARACTER(LEN=*),                   INTENT(IN) :: HCOMMENT ! comment string
 CHARACTER(LEN=*),                   INTENT(IN) :: HUNIT    ! physical unit
@@ -1572,7 +1586,7 @@ END IF
 !            ----------------------
 !
 IF (IRESP==0) &
-CALL WRITE_DIACHRO(CCURRENT_FMDIAC,CLUOUT0,YGROUP,"SPXY",IGRID,ZDATIME, ZWORK6,     &
+CALL WRITE_DIACHRO(TPDIAFILE,CLUOUT0,YGROUP,"SPXY",IGRID,ZDATIME, ZWORK6,     &
                    ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE.,   &
                    IIL,IIH,IJL,IJH,IKL,IKH                                     )
 !
@@ -1614,7 +1628,7 @@ IF (GAVG) THEN
   YGROUP    = 'T_'//YGROUP
 END IF
 !
-CALL WRITE_DIACHRO(CCURRENT_FMDIAC,CLUOUT0,YGROUP,"SPXY",IGRID,ZDATIME, ZWORK6,     &
+CALL WRITE_DIACHRO(TPDIAFILE,CLUOUT0,YGROUP,"SPXY",IGRID,ZDATIME, ZWORK6,     &
                    ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE.,   &
                    IIL,IIH,IJL,IJH,IKL,IKH                                     )
 !
@@ -1628,12 +1642,13 @@ END SUBROUTINE LES_DIACHRO_2PT
 !------------------------------------------------------------------------------
 !
 !#####################################################################
-SUBROUTINE LES_DIACHRO_SPEC(HGROUP,HCOMMENT,HUNIT,PSPECTRAX,PSPECTRAY)
+SUBROUTINE LES_DIACHRO_SPEC(TPDIAFILE,HGROUP,HCOMMENT,HUNIT,PSPECTRAX,PSPECTRAY)
 !#####################################################################
 !
 !* Modification 01/04/03 (V. Masson) safer use of ZWORK6 with loops
 !
 !
+USE MODD_IO_ll, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_GRID
 USE MODD_CONF
@@ -1644,6 +1659,7 @@ IMPLICIT NONE
 !
 !*      0.1  declarations of arguments
 !
+TYPE(TFILEDATA),                      INTENT(IN) :: TPDIAFILE! file to write
 CHARACTER(LEN=*),                     INTENT(IN) :: HGROUP   ! group title
 CHARACTER(LEN=*),                     INTENT(IN) :: HCOMMENT ! comment string
 CHARACTER(LEN=*),                     INTENT(IN) :: HUNIT    ! physical unit
@@ -1714,7 +1730,7 @@ WRITE(YSTRING,FMT="(I6.6)") NINT( XLES_CURRENT_DOMEGAX )
 YCOMMENT(:) = " DOMEGAX="//YSTRING//' '//HCOMMENT
 !
 !
-CALL WRITE_DIACHRO(CCURRENT_FMDIAC,CLUOUT0,YGROUP,"SPXY",IGRID,ZDATIME, ZWORK6,     &
+CALL WRITE_DIACHRO(TPDIAFILE,CLUOUT0,YGROUP,"SPXY",IGRID,ZDATIME, ZWORK6,     &
                    ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE.,   &
                    IIL,IIH,IJL,IJH,IKL,IKH                                     )
 !
@@ -1726,7 +1742,7 @@ CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP,ZDATIME)
 YGROUP    = 'T_'//YGROUP
 !
 IF (IRESP==0) &
-CALL WRITE_DIACHRO(CCURRENT_FMDIAC,CLUOUT0,YGROUP,"SPXY",IGRID,ZDATIME, ZWORK6,     &
+CALL WRITE_DIACHRO(TPDIAFILE,CLUOUT0,YGROUP,"SPXY",IGRID,ZDATIME, ZWORK6,     &
                    ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE.,   &
                    IIL,IIH,IJL,IJH,IKL,IKH                                     )
 DEALLOCATE(ZWORK6)
@@ -1762,7 +1778,7 @@ YTITLE(:) = YGROUP
 WRITE(YSTRING,FMT="(I6.6)") NINT( XLES_CURRENT_DOMEGAY )
 YCOMMENT(:) = " DOMEGAY="//YSTRING//' '//HCOMMENT
 !
-CALL WRITE_DIACHRO(CCURRENT_FMDIAC,CLUOUT0,YGROUP,"SPXY",IGRID,ZDATIME, ZWORK6,     &
+CALL WRITE_DIACHRO(TPDIAFILE,CLUOUT0,YGROUP,"SPXY",IGRID,ZDATIME, ZWORK6,     &
                    ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE.,   &
                    IIL,IIH,IJL,IJH,IKL,IKH                                     )
 !
@@ -1773,7 +1789,7 @@ CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP,ZDATIME)
 YGROUP    = 'T_'//YGROUP
 !
 IF (IRESP==0) &
-CALL WRITE_DIACHRO(CCURRENT_FMDIAC,CLUOUT0,YGROUP,"SPXY",IGRID,ZDATIME, ZWORK6,     &
+CALL WRITE_DIACHRO(TPDIAFILE,CLUOUT0,YGROUP,"SPXY",IGRID,ZDATIME, ZWORK6,     &
                    ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE.,   &
                    IIL,IIH,IJL,IJH,IKL,IKH                                     )                   
 !
diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90
index a40eaa059..23a9bf6d5 100644
--- a/src/MNH/modeln.f90
+++ b/src/MNH/modeln.f90
@@ -280,7 +280,7 @@ USE MODD_LUNIT
 USE MODD_GRID, ONLY: XLONORI,XLATORI
 USE MODD_SERIES, ONLY: LSERIES
 USE MODD_TURB_CLOUD, ONLY: NMODEL_CLOUD,CTURBLEN_CLOUD,XCEI
-USE MODD_IO_ll, ONLY: TFILEDATA,TFILE_SURFEX
+USE MODD_IO_ll, ONLY: LIOCDF4,LLFIOUT,TFILEDATA,TFILE_SURFEX
 !
 USE MODD_SUB_MODEL_n
 USE MODD_GET_n
@@ -426,11 +426,6 @@ CHARACTER (LEN=32) :: YDESFM    ! name of the desfm part of this FM-file
 INTEGER  :: INBVAR              ! number of HALO2_lls to allocate
 INTEGER  :: IRESP               ! return code in FM routines
 INTEGER  :: IINFO_ll            ! return code of parallel routine
-INTEGER :: INPRAR               ! number of articles predicted  in
-                                !  the LFIFM file
-INTEGER :: ININAR               ! number of articles  present in
-                                !  the LFIFM file
-INTEGER :: ITYPE                ! type of file (cpio or not)
 INTEGER :: IVERB                ! LFI verbosity level
 LOGICAL :: GSTEADY_DMASS        ! conditional call to mass computation
 !
@@ -530,6 +525,7 @@ TYPE(LIST_ll), POINTER :: TZFIELDC_ll   ! list of fields to exchange
 TYPE(HALO2LIST_ll), POINTER :: TZHALO2C_ll   ! list of fields to exchange
 !
 TYPE(TFILEDATA),POINTER :: TZBAKFILE, TZOUTFILE
+! TYPE(TFILEDATA),SAVE    :: TZDIACFILE
 !-------------------------------------------------------------------------------
 !
 !*       0.    MICROPHYSICAL SCHEME
@@ -564,7 +560,6 @@ END SELECT
 !
 !*        1    PRELIMINARY
 !              ------------
-ITYPE = 1
 IMI = GET_CURRENT_MODEL_INDEX()
 !
 !*       1.0   update NSV_* variables for current model
@@ -606,11 +601,11 @@ IF (KTCOUNT == 1) THEN
   IBAK=0
   IOUT=0
 !
-  INPRAR = 50
-  CALL FMOPEN_ll(CFMDIAC,'WRITE',CLUOUT,INPRAR,ITYPE,NVERB,ININAR,IRESP)
-  YDESFM=ADJUSTL(ADJUSTR(CFMDIAC)//'.des')
+  CALL IO_FILE_OPEN_ll(TDIAFILE,CLUOUT,IRESP)
+!
+  YDESFM=TRIM(TDIAFILE%CNAME)//'.des'
   CALL WRITE_DESFM_n(IMI,YDESFM,CLUOUT)
-  CALL WRITE_LFIFMN_FORDIACHRO_n(CFMDIAC)
+  CALL WRITE_LFIFMN_FORDIACHRO_n(TDIAFILE)
 !
 !*       1.4   Initialization of the list of fields for the halo updates
 !
@@ -1913,7 +1908,7 @@ CALL END_DIAG_IN_RUN
 ZTIME1 = ZTIME2
 !
 IF (NBUMOD==IMI .AND. CBUTYPE/='NONE') THEN
-  CALL ENDSTEP_BUDGET(CFMDIAC,CLUOUT,KTCOUNT,TDTCUR,TDTMOD,XTSTEP,NSV)
+  CALL ENDSTEP_BUDGET(TDIAFILE,CLUOUT,KTCOUNT,TDTCUR,TDTMOD,XTSTEP,NSV)
 END IF
 !
 CALL SECOND_MNH2(ZTIME2)
@@ -1956,16 +1951,16 @@ END IF
 !
 IF (OEXIT) THEN
 !
-  IF (LSERIES) CALL WRITE_SERIES_n(CFMDIAC,CLUOUT )
-  CALL WRITE_AIRCRAFT_BALLOON(CFMDIAC)
-  CALL WRITE_STATION_n(CFMDIAC)
-  CALL WRITE_PROFILER_n(CFMDIAC)
-  CALL WRITE_LES_n(' ')
-  CALL WRITE_LES_n('A')
-  CALL WRITE_LES_n('E')
-  CALL WRITE_LES_n('H')
-  CALL MENU_DIACHRO(CFMDIAC,CLUOUT,'END')
-  CALL FMCLOS_ll(CFMDIAC,'KEEP',CLUOUT,IRESP)
+  IF (LSERIES) CALL WRITE_SERIES_n(TDIAFILE,CLUOUT)
+  CALL WRITE_AIRCRAFT_BALLOON(TDIAFILE)
+  CALL WRITE_STATION_n(TDIAFILE)
+  CALL WRITE_PROFILER_n(TDIAFILE)
+  CALL WRITE_LES_n(TDIAFILE,' ')
+  CALL WRITE_LES_n(TDIAFILE,'A')
+  CALL WRITE_LES_n(TDIAFILE,'E')
+  CALL WRITE_LES_n(TDIAFILE,'H')
+  CALL MENU_DIACHRO(TDIAFILE,CLUOUT,'END')
+  CALL IO_FILE_CLOSE_ll(TDIAFILE,CLUOUT,IRESP)
   !
   CALL FMCLOS_ll(CINIFILE,'KEEP',CLUOUT,IRESP)
   IF (CSURF=="EXTE") CALL FMCLOS_ll(CINIFILEPGD,'KEEP',CLUOUT,IRESP,OPARALLELIO=.FALSE.)
diff --git a/src/MNH/modules_diachro.f90 b/src/MNH/modules_diachro.f90
index 47cd397d2..aed84fc7c 100644
--- a/src/MNH/modules_diachro.f90
+++ b/src/MNH/modules_diachro.f90
@@ -14,9 +14,13 @@
 !
 INTERFACE
 !
-SUBROUTINE MENU_DIACHRO(HFILEDIA,HLUOUTDIA,HGROUP)
-CHARACTER(LEN=*) :: HGROUP
-CHARACTER(LEN=*) :: HFILEDIA,HLUOUTDIA
+SUBROUTINE MENU_DIACHRO(TPDIAFILE,HLUOUTDIA,HGROUP)
+USE MODD_IO_ll, ONLY: TFILEDATA
+!
+TYPE(TFILEDATA),  INTENT(IN) :: TPDIAFILE    ! file to write
+CHARACTER(LEN=*), INTENT(IN) :: HGROUP
+CHARACTER(LEN=*), INTENT(IN) :: HLUOUTDIA
+!
 END SUBROUTINE MENU_DIACHRO
 !
 END INTERFACE
@@ -29,8 +33,9 @@ END MODULE MODI_MENU_DIACHRO
 !
 INTERFACE
 !
-SUBROUTINE WRITE_LFIFMN_FORDIACHRO_n(HFMFILE)
-CHARACTER(LEN=28), INTENT(IN) :: HFMFILE      ! Name of FM-file to write
+SUBROUTINE WRITE_LFIFMN_FORDIACHRO_n(TPFILE)
+USE MODD_IO_ll, ONLY: TFILEDATA
+TYPE(TFILEDATA),INTENT(IN) :: TPFILE
 END SUBROUTINE WRITE_LFIFMN_FORDIACHRO_n
 !
 END INTERFACE
@@ -42,27 +47,30 @@ END MODULE MODI_WRITE_LFIFMN_FORDIACHRO_n
 !
 INTERFACE
 !
-SUBROUTINE WRITE_DIACHRO(HFILEDIA,HLUOUTDIA,HGROUP,HTYPE,KGRID, &
+SUBROUTINE WRITE_DIACHRO(TPDIAFILE,HLUOUTDIA,HGROUP,HTYPE,KGRID, &
                    PDATIME,PVAR,PTRAJT,HTITRE,HUNITE,HCOMMENT,  &
                    OICP, OJCP, OKCP, KIL, KIH, KJL, KJH, KKL, KKH, &
-			       PTRAJX,PTRAJY,PTRAJZ,PMASK)
-CHARACTER(LEN=*)              :: HFILEDIA,HLUOUTDIA
-CHARACTER(LEN=*)              :: HGROUP, HTYPE
-CHARACTER(LEN=*),DIMENSION(:) :: HTITRE, HUNITE, HCOMMENT
-
-INTEGER,DIMENSION(:)  :: KGRID
-INTEGER,OPTIONAL      :: KIL, KIH
-INTEGER,OPTIONAL      :: KJL, KJH
-INTEGER,OPTIONAL      :: KKL, KKH
-LOGICAL,OPTIONAL      :: OICP, OJCP, OKCP
-REAL,DIMENSION(:,:,:,:,:,:),OPTIONAL  :: PMASK
-REAL,DIMENSION(:,:)             :: PDATIME
-REAL,DIMENSION(:,:,:,:,:,:)     :: PVAR
-REAL,DIMENSION(:,:)             :: PTRAJT
-REAL,DIMENSION(:,:,:),OPTIONAL  :: PTRAJX
-REAL,DIMENSION(:,:,:),OPTIONAL  :: PTRAJY
-REAL,DIMENSION(:,:,:),OPTIONAL  :: PTRAJZ
-
+                   PTRAJX,PTRAJY,PTRAJZ,PMASK)
+!
+USE MODD_IO_ll, ONLY: TFILEDATA
+!
+TYPE(TFILEDATA),              INTENT(IN)          :: TPDIAFILE    ! file to write
+CHARACTER(LEN=*),             INTENT(IN)          :: HLUOUTDIA
+CHARACTER(LEN=*),             INTENT(IN)          :: HGROUP, HTYPE
+INTEGER,DIMENSION(:),         INTENT(IN)          :: KGRID
+REAL,DIMENSION(:,:),          INTENT(IN)          :: PDATIME
+REAL,DIMENSION(:,:,:,:,:,:),  INTENT(IN)          :: PVAR
+REAL,DIMENSION(:,:),          INTENT(IN)          :: PTRAJT
+CHARACTER(LEN=*),DIMENSION(:),INTENT(IN)          :: HTITRE, HUNITE, HCOMMENT
+LOGICAL,                      INTENT(IN),OPTIONAL :: OICP, OJCP, OKCP
+INTEGER,                      INTENT(IN),OPTIONAL :: KIL, KIH
+INTEGER,                      INTENT(IN),OPTIONAL :: KJL, KJH
+INTEGER,                      INTENT(IN),OPTIONAL :: KKL, KKH
+REAL,DIMENSION(:,:,:),        INTENT(IN),OPTIONAL :: PTRAJX
+REAL,DIMENSION(:,:,:),        INTENT(IN),OPTIONAL :: PTRAJY
+REAL,DIMENSION(:,:,:),        INTENT(IN),OPTIONAL :: PTRAJZ
+REAL,DIMENSION(:,:,:,:,:,:),  INTENT(IN),OPTIONAL :: PMASK
+!
 END SUBROUTINE WRITE_DIACHRO
 !
 END INTERFACE
diff --git a/src/MNH/write_aircraft_balloon.f90 b/src/MNH/write_aircraft_balloon.f90
index 3a7777062..37089e8be 100644
--- a/src/MNH/write_aircraft_balloon.f90
+++ b/src/MNH/write_aircraft_balloon.f90
@@ -14,9 +14,11 @@ MODULE MODI_WRITE_AIRCRAFT_BALLOON
 !
 INTERFACE
 !
-      SUBROUTINE WRITE_AIRCRAFT_BALLOON(HFMDIAC)
+      SUBROUTINE WRITE_AIRCRAFT_BALLOON(TPDIAFILE)
 !
-CHARACTER(LEN=*), INTENT(IN) :: HFMDIAC  ! diachronic file name
+USE MODD_IO_ll, ONLY: TFILEDATA
+!
+TYPE(TFILEDATA), INTENT(IN) :: TPDIAFILE ! file to write
 !
 END SUBROUTINE WRITE_AIRCRAFT_BALLOON
 !
@@ -25,7 +27,7 @@ END INTERFACE
 END MODULE MODI_WRITE_AIRCRAFT_BALLOON
 !
 !     ##########################################
-      SUBROUTINE WRITE_AIRCRAFT_BALLOON(HFMDIAC)
+      SUBROUTINE WRITE_AIRCRAFT_BALLOON(TPDIAFILE)
 !     ##########################################
 !
 !
@@ -72,6 +74,7 @@ END MODULE MODI_WRITE_AIRCRAFT_BALLOON
 !          ------------
 !
 USE MODD_CST
+USE MODD_IO_ll, ONLY: TFILEDATA
 USE MODD_LUNIT
 USE MODD_PARAMETERS
 !
@@ -107,7 +110,7 @@ IMPLICIT NONE
 !
 !*      0.1  declarations of arguments
 !
-CHARACTER(LEN=*), INTENT(IN) :: HFMDIAC  ! diachronic file name
+TYPE(TFILEDATA), INTENT(IN) :: TPDIAFILE ! file to write
 !
 !-------------------------------------------------------------------------------
 !
@@ -841,11 +844,11 @@ ALLOCATE (ZWZ6(1,1,IKU,SIZE(TPFLYER%TIME),1,JPROCZ))
 ZWZ6 = ZWORKZ6(:,:,:,:,:,:JPROCZ)
 DEALLOCATE(ZWORKZ6)
 !
-CALL WRITE_DIACHRO(HFMDIAC,CLUOUT0,YGROUP,"RSPL",IGRID, TPFLYER%DATIME, ZW6, &
-                   ZTRAJT,YTITLE,YUNIT,YCOMMENT,                             &
-                   PTRAJX=ZTRAJX, PTRAJY=ZTRAJY, PTRAJZ=ZTRAJZ               )
+CALL WRITE_DIACHRO(TPDIAFILE,CLUOUT0,YGROUP,"RSPL",IGRID, TPFLYER%DATIME, ZW6, &
+                   ZTRAJT,YTITLE,YUNIT,YCOMMENT,                               &
+                   PTRAJX=ZTRAJX, PTRAJY=ZTRAJY, PTRAJZ=ZTRAJZ                 )
 !
-CALL WRITE_DIACHRO(HFMDIAC,CLUOUT0,YGROUPZ,"CART",IGRIDZ, TPFLYER%DATIME,    &
+CALL WRITE_DIACHRO(TPDIAFILE,CLUOUT0,YGROUPZ,"CART",IGRIDZ, TPFLYER%DATIME,  &
                    ZWZ6,ZTRAJT,YTITLEZ,YUNITZ,YCOMMENTZ,                     &
                    .TRUE.,.TRUE.,.FALSE.,                                    &
                    KIL=1,KIH=1,KJL=1,KJH=1,KKL=1,KKH=IKU                     )
diff --git a/src/MNH/write_budget.f90 b/src/MNH/write_budget.f90
index a50b48fd9..21300126c 100644
--- a/src/MNH/write_budget.f90
+++ b/src/MNH/write_budget.f90
@@ -15,12 +15,13 @@
 !
 INTERFACE
 !
-      SUBROUTINE WRITE_BUDGET(HFILEDIA,HLUOUT,TPDTCUR,                 &
+      SUBROUTINE WRITE_BUDGET(TPDIAFILE,HLUOUT,TPDTCUR,                 &
                               TPDTMOD,PTSTEP, KSV                      )
 !
+USE MODD_IO_ll, ONLY: TFILEDATA
 USE MODD_TYPE_DATE
 !
-CHARACTER (LEN=*),  INTENT(IN) :: HFILEDIA     ! name of FM-file to write
+TYPE(TFILEDATA),    INTENT(IN) :: TPDIAFILE    ! file to write
 CHARACTER (LEN=*),  INTENT(IN) :: HLUOUT       ! name of output listing
 TYPE (DATE_TIME),   INTENT(IN) :: TPDTCUR      ! Current date and time
 TYPE (DATE_TIME),   INTENT(IN) :: TPDTMOD      ! Creation date and time
@@ -36,7 +37,7 @@ END MODULE MODI_WRITE_BUDGET
 !
 !
 !     ##################################################################
-      SUBROUTINE WRITE_BUDGET(HFILEDIA,HLUOUT,TPDTCUR,                 &
+      SUBROUTINE WRITE_BUDGET(TPDIAFILE,HLUOUT,TPDTCUR,                 &
                               TPDTMOD,PTSTEP, KSV                      )
 !     ##################################################################
 !
@@ -46,7 +47,7 @@ END MODULE MODI_WRITE_BUDGET
 !!    PURPOSE
 !!    -------
 !        The purpose of this routine is to write an initial LFIFM File 
-!     of name HFILEDIA//'.lfi' with the FM routines. This routine is 
+!     of name YFILEDIA//'.lfi' with the FM routines. This routine is 
 !     temporary because the budget terms had to be stored in the diachronic
 !     MesoNH-files, not yet developped. 
 !
@@ -135,6 +136,7 @@ END MODULE MODI_WRITE_BUDGET
 !
 !*       0.    
 !              ------------
+USE MODD_IO_ll, ONLY: TFILEDATA
 USE MODE_TIME
 USE MODD_BUDGET
 !
@@ -151,7 +153,7 @@ IMPLICIT NONE
 !  
 !*       0.1   Declarations of arguments :
 !
-CHARACTER (LEN=*),  INTENT(IN) :: HFILEDIA     ! name of FM-file to write
+TYPE(TFILEDATA),    INTENT(IN) :: TPDIAFILE    ! file to write
 CHARACTER (LEN=*),  INTENT(IN) :: HLUOUT       ! name of output listing
 TYPE (DATE_TIME),   INTENT(IN) :: TPDTCUR      ! Current date and time
 TYPE (DATE_TIME),   INTENT(IN) :: TPDTMOD      ! Creation date and time
@@ -161,7 +163,8 @@ INTEGER,            INTENT(IN) :: KSV          ! Number of Scalar Variables
 !*       0.2   Declarations of local variables :
 !
 INTEGER           :: IRESP          ! IRESP  : return-code if a problem appears 
-                                    !  at the open of the file                                                                      !  LFI  routines 
+                                    !  at the open of the file
+                                    !  LFI  routines 
 INTEGER           :: IGRID          ! IGRID : grid indicator
 INTEGER           :: ILENCH         ! ILENCH : length of comment string 
 !
@@ -181,6 +184,7 @@ CHARACTER (LEN=99),  ALLOCATABLE  , DIMENSION(:)  :: YBUCOMMENT    ! comment
 CHARACTER (LEN=100), ALLOCATABLE  , DIMENSION(:)  :: YWORKCOMMENT  ! comment   
 CHARACTER (LEN=100), ALLOCATABLE  , DIMENSION(:)  :: YWORKUNIT     ! comment
 CHARACTER (LEN=9)                                 :: YGROUP_NAME   ! group name                                    
+CHARACTER(LEN=28)                                 :: YFILEDIA
 REAL,    ALLOCATABLE              , DIMENSION(:,:):: ZWORKDATIME   ! global time
                                                                    !     info
 INTEGER                                           :: JSV           ! loop index
@@ -190,6 +194,8 @@ INTEGER :: IP
 !
 !-------------------------------------------------------------------------------
 !
+YFILEDIA = TPDIAFILE%CNAME
+!
 !*	 1.     write TSTEP and BULEN
 !	        ---------------------
 !
@@ -197,12 +203,12 @@ YRECFM='TSTEP'
 YCOMMENT=' '
 IGRID=0
 ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFILEDIA,YRECFM,HLUOUT,'--',PTSTEP,IGRID,ILENCH,YCOMMENT,IRESP)
+CALL FMWRIT(YFILEDIA,YRECFM,HLUOUT,'--',PTSTEP,IGRID,ILENCH,YCOMMENT,IRESP)
 !
 YRECFM='BULEN'
 YCOMMENT=' '
 ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFILEDIA,YRECFM,HLUOUT,'--',XBULEN,IGRID,ILENCH,YCOMMENT,IRESP)
+CALL FMWRIT(YFILEDIA,YRECFM,HLUOUT,'--',XBULEN,IGRID,ILENCH,YCOMMENT,IRESP)
 !
 !*   1.1   initialize NBUTSHIFT
 !           ---------------------
@@ -295,7 +301,7 @@ SELECT CASE (CBUTYPE)
 
       WRITE(YGROUP_NAME,FMT="('UU___',I4.4)") NBUTSHIFT
 !
-      CALL WRITE_DIACHRO(HFILEDIA, HLUOUT, YGROUP_NAME, 'CART', IWORKGRID,  &
+      CALL WRITE_DIACHRO(TPDIAFILE, HLUOUT, YGROUP_NAME, 'CART', IWORKGRID,  &
                          ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(1, :),  &
                          YWORKUNIT, YWORKCOMMENT,                           &
                          LBU_ICP, LBU_JCP, LBU_KCP,                         & 
@@ -318,7 +324,7 @@ SELECT CASE (CBUTYPE)
       IWORKGRID(1)       = 2
       WRITE(YGROUP_NAME,FMT="('RJX__',I4.4)") NBUTSHIFT
 ! 
-      CALL WRITE_DIACHRO(HFILEDIA, HLUOUT, YGROUP_NAME,'CART', IWORKGRID,   &
+      CALL WRITE_DIACHRO(TPDIAFILE, HLUOUT, YGROUP_NAME,'CART', IWORKGRID,   &
                          ZWORKDATIME, ZWORK, ZWORKTEMP, YBUCOMMENT,         &
                          YWORKUNIT, YWORKCOMMENT,                           &
                          LBU_ICP, LBU_JCP, LBU_KCP,                         & 
@@ -367,7 +373,7 @@ SELECT CASE (CBUTYPE)
       IWORKGRID(:)       = 3
       WRITE(YGROUP_NAME,FMT="('VV___',I4.4)") NBUTSHIFT
                                 !
-      CALL WRITE_DIACHRO(HFILEDIA, HLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
+      CALL WRITE_DIACHRO(TPDIAFILE, HLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
            ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(IP, :),   &
            YWORKUNIT, YWORKCOMMENT,                           &
            LBU_ICP, LBU_JCP, LBU_KCP,                         & 
@@ -389,7 +395,7 @@ SELECT CASE (CBUTYPE)
       IWORKGRID(1)       = 3
       WRITE(YGROUP_NAME,FMT="('RJY__',I4.4)") NBUTSHIFT
 ! 
-      CALL WRITE_DIACHRO(HFILEDIA, HLUOUT, YGROUP_NAME,'CART', IWORKGRID, &
+      CALL WRITE_DIACHRO(TPDIAFILE, HLUOUT, YGROUP_NAME,'CART', IWORKGRID, &
            ZWORKDATIME, ZWORK, ZWORKTEMP, YBUCOMMENT,         &
            YWORKUNIT, YWORKCOMMENT,                           &
            LBU_ICP, LBU_JCP, LBU_KCP,                         & 
@@ -438,7 +444,7 @@ SELECT CASE (CBUTYPE)
       YWORKCOMMENT(:)    = 'Budget of momentum along Z axis'
       IWORKGRID(:)       = 4
       WRITE(YGROUP_NAME,FMT="('WW___',I4.4)") NBUTSHIFT
-      CALL WRITE_DIACHRO(HFILEDIA, HLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
+      CALL WRITE_DIACHRO(TPDIAFILE, HLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
            ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(IP, :),   &
            YWORKUNIT, YWORKCOMMENT,                           &
            LBU_ICP, LBU_JCP, LBU_KCP,                         & 
@@ -460,7 +466,7 @@ SELECT CASE (CBUTYPE)
       IWORKGRID(1)       = 4
       WRITE(YGROUP_NAME,FMT="('RJZ__',I4.4)") NBUTSHIFT
 ! 
-      CALL WRITE_DIACHRO(HFILEDIA, HLUOUT, YGROUP_NAME,'CART', IWORKGRID, &
+      CALL WRITE_DIACHRO(TPDIAFILE, HLUOUT, YGROUP_NAME,'CART', IWORKGRID, &
            ZWORKDATIME, ZWORK, ZWORKTEMP, YBUCOMMENT,         &
            YWORKUNIT, YWORKCOMMENT,                           &
            LBU_ICP, LBU_JCP, LBU_KCP,                         & 
@@ -493,7 +499,7 @@ SELECT CASE (CBUTYPE)
       IWORKGRID(1)       = 1
       WRITE(YGROUP_NAME,FMT="('RJS__',I4.4)") NBUTSHIFT
 !
-      CALL WRITE_DIACHRO(HFILEDIA, HLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
+      CALL WRITE_DIACHRO(TPDIAFILE, HLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
            ZWORKDATIME, ZWORK, ZWORKTEMP, YBUCOMMENT,         &
            YWORKUNIT, YWORKCOMMENT,                           &
            LBU_ICP, LBU_JCP, LBU_KCP,                         & 
@@ -543,7 +549,7 @@ SELECT CASE (CBUTYPE)
       IWORKGRID(:)       = 1
       WRITE(YGROUP_NAME,FMT="('TH___',I4.4)") NBUTSHIFT
 !
-      CALL WRITE_DIACHRO(HFILEDIA, HLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
+      CALL WRITE_DIACHRO(TPDIAFILE, HLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
            ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(IP, :),   &
            YWORKUNIT, YWORKCOMMENT,                           &
            LBU_ICP, LBU_JCP, LBU_KCP,                         & 
@@ -589,7 +595,7 @@ SELECT CASE (CBUTYPE)
       IWORKGRID(:)       = 1
       WRITE(YGROUP_NAME,FMT="('TK___',I4.4)") NBUTSHIFT 
 !
-      CALL WRITE_DIACHRO(HFILEDIA, HLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
+      CALL WRITE_DIACHRO(TPDIAFILE, HLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
            ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(IP, :),   &
            YWORKUNIT, YWORKCOMMENT,                           &
            LBU_ICP, LBU_JCP, LBU_KCP,                         & 
@@ -635,7 +641,7 @@ SELECT CASE (CBUTYPE)
       IWORKGRID(:)       = 1
       WRITE(YGROUP_NAME,FMT="('RV___',I4.4)") NBUTSHIFT
 !
-      CALL WRITE_DIACHRO(HFILEDIA, HLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
+      CALL WRITE_DIACHRO(TPDIAFILE, HLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
            ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(IP, :),   &
            YWORKUNIT, YWORKCOMMENT,                           &
            LBU_ICP, LBU_JCP, LBU_KCP,                         & 
@@ -681,7 +687,7 @@ SELECT CASE (CBUTYPE)
       IWORKGRID(:)       = 1
       WRITE(YGROUP_NAME,FMT="('RC___',I4.4)") NBUTSHIFT 
 !
-      CALL WRITE_DIACHRO(HFILEDIA, HLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
+      CALL WRITE_DIACHRO(TPDIAFILE, HLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
            ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(IP, :),   &
            YWORKUNIT, YWORKCOMMENT,                           &
            LBU_ICP, LBU_JCP, LBU_KCP,                         & 
@@ -726,7 +732,7 @@ SELECT CASE (CBUTYPE)
       IWORKGRID(:)       = 1
       WRITE(YGROUP_NAME,FMT="('RR___',I4.4)") NBUTSHIFT
 !
-      CALL WRITE_DIACHRO(HFILEDIA, HLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
+      CALL WRITE_DIACHRO(TPDIAFILE, HLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
            ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(IP, :),   &
            YWORKUNIT, YWORKCOMMENT,                           &
            LBU_ICP, LBU_JCP, LBU_KCP,                         & 
@@ -771,7 +777,7 @@ SELECT CASE (CBUTYPE)
       IWORKGRID(:)       = 1
       WRITE(YGROUP_NAME,FMT="('RI___',I4.4)") NBUTSHIFT
 !
-      CALL WRITE_DIACHRO(HFILEDIA, HLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
+      CALL WRITE_DIACHRO(TPDIAFILE, HLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
            ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(IP, :),   &
            YWORKUNIT, YWORKCOMMENT,                           &
            LBU_ICP, LBU_JCP, LBU_KCP,                         & 
@@ -816,7 +822,7 @@ SELECT CASE (CBUTYPE)
       IWORKGRID(:)       = 1
       WRITE(YGROUP_NAME,FMT="('RS___',I4.4)") NBUTSHIFT
 !
-      CALL WRITE_DIACHRO(HFILEDIA, HLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
+      CALL WRITE_DIACHRO(TPDIAFILE, HLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
            ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(IP, :),   &
            YWORKUNIT, YWORKCOMMENT,                           &
            LBU_ICP, LBU_JCP, LBU_KCP,                         & 
@@ -861,7 +867,7 @@ SELECT CASE (CBUTYPE)
       IWORKGRID(:)       = 1
       WRITE(YGROUP_NAME,FMT="('RG___',I4.4)") NBUTSHIFT
 !
-      CALL WRITE_DIACHRO(HFILEDIA, HLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
+      CALL WRITE_DIACHRO(TPDIAFILE, HLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
            ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(IP, :),   &
            YWORKUNIT, YWORKCOMMENT,                           &
            LBU_ICP, LBU_JCP, LBU_KCP,                         & 
@@ -906,7 +912,7 @@ SELECT CASE (CBUTYPE)
       IWORKGRID(:)       = 1
       WRITE(YGROUP_NAME,FMT="('RH___',I4.4)") NBUTSHIFT
 !
-      CALL WRITE_DIACHRO(HFILEDIA, HLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
+      CALL WRITE_DIACHRO(TPDIAFILE, HLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
            ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(IP, :),   &
            YWORKUNIT, YWORKCOMMENT,                           &
            LBU_ICP, LBU_JCP, LBU_KCP,                         & 
@@ -955,7 +961,7 @@ SELECT CASE (CBUTYPE)
         IWORKGRID(:)       = 1
         WRITE(YGROUP_NAME,FMT="('SV',I3.3,I4.4)") JSV,NBUTSHIFT
 !
-        CALL WRITE_DIACHRO(HFILEDIA, HLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
+        CALL WRITE_DIACHRO(TPDIAFILE, HLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
              ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(IP, :),   &
              YWORKUNIT, YWORKCOMMENT,                           &
              LBU_ICP, LBU_JCP, LBU_KCP,                         & 
@@ -1021,10 +1027,10 @@ SELECT CASE (CBUTYPE)
         WRITE(YRECFM,FMT="('MASK_',I4.4,'.MASK')") NBUTSHIFT
         WRITE(YCOMMENT,FMT="('X_Y_MASK',I4.4)") NBUTSHIFT
         ILENCH=LEN(YCOMMENT)
-        CALL FMWRIT(HFILEDIA,YRECFM,HLUOUT,'XY',ZWORKMASK(:,:,:,:,:,:),IGRID, &
+        CALL FMWRIT(YFILEDIA,YRECFM,HLUOUT,'XY',ZWORKMASK(:,:,:,:,:,:),IGRID, &
                                    ILENCH,YCOMMENT,IRESP)
         WRITE(YRECFM,FMT="('MASK_',I4.4)") NBUTSHIFT
-        CALL MENU_DIACHRO(HFILEDIA,HLUOUT,YRECFM)
+        CALL MENU_DIACHRO(TPDIAFILE,HLUOUT,YRECFM)
         DEALLOCATE(ZWORKMASK)
 !
 !*	 3.2    storage of the budgets array
@@ -1048,7 +1054,7 @@ SELECT CASE (CBUTYPE)
       IWORKGRID(:)       = 2
       WRITE(YGROUP_NAME,FMT="('RJX__',I4.4)") NBUTSHIFT
 !
-      CALL WRITE_DIACHRO(HFILEDIA, HLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
+      CALL WRITE_DIACHRO(TPDIAFILE, HLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
                          ZWORKDATIME, ZWORK, ZWORKTEMP, CBUCOMMENT(1, :),   &
                          YWORKUNIT, YWORKCOMMENT,                           &
                          LBU_ICP, LBU_JCP, LBU_KCP,                         & 
@@ -1079,7 +1085,7 @@ SELECT CASE (CBUTYPE)
       IWORKGRID(:)       = 2
       WRITE(YGROUP_NAME,FMT="('UU___',I4.4)") NBUTSHIFT
 !
-      CALL WRITE_DIACHRO(HFILEDIA, HLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
+      CALL WRITE_DIACHRO(TPDIAFILE, HLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
                          ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(1, :),   &
                          YWORKUNIT, YWORKCOMMENT,                           &
                          LBU_ICP, LBU_JCP, LBU_KCP,                         & 
@@ -1106,7 +1112,7 @@ SELECT CASE (CBUTYPE)
       IWORKGRID(:)       = 3
       WRITE(YGROUP_NAME,FMT="('RJY__',I4.4)") NBUTSHIFT
 !
-      CALL WRITE_DIACHRO(HFILEDIA, HLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
+      CALL WRITE_DIACHRO(TPDIAFILE, HLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
                 	 ZWORKDATIME, ZWORK, ZWORKTEMP, CBUCOMMENT(1, :),   &
 	       		 YWORKUNIT, YWORKCOMMENT,                           &
                          LBU_ICP, LBU_JCP, LBU_KCP,                         & 
@@ -1135,7 +1141,7 @@ SELECT CASE (CBUTYPE)
       IWORKGRID(:)       = 3
       WRITE(YGROUP_NAME,FMT="('VV___',I4.4)") NBUTSHIFT
 !
-      CALL WRITE_DIACHRO(HFILEDIA, HLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
+      CALL WRITE_DIACHRO(TPDIAFILE, HLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
                          ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(2, :),   &
 	        	 YWORKUNIT, YWORKCOMMENT,                           &
                          LBU_ICP, LBU_JCP, LBU_KCP,                         & 
@@ -1162,7 +1168,7 @@ SELECT CASE (CBUTYPE)
       IWORKGRID(:)       = 4
       WRITE(YGROUP_NAME,FMT="('RJZ__',I4.4)") NBUTSHIFT
 !
-      CALL WRITE_DIACHRO(HFILEDIA, HLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
+      CALL WRITE_DIACHRO(TPDIAFILE, HLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
                 	 ZWORKDATIME, ZWORK, ZWORKTEMP, CBUCOMMENT(1, :),   &
 	        	 YWORKUNIT, YWORKCOMMENT,                           &
                          LBU_ICP, LBU_JCP, LBU_KCP,                         & 
@@ -1191,7 +1197,7 @@ SELECT CASE (CBUTYPE)
       IWORKGRID(:)       = 4
       WRITE(YGROUP_NAME,FMT="('WW___',I4.4)") NBUTSHIFT
 !
-      CALL WRITE_DIACHRO(HFILEDIA, HLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
+      CALL WRITE_DIACHRO(TPDIAFILE, HLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
                 	 ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(3, :),   &
 	        	 YWORKUNIT, YWORKCOMMENT,                           &
                          LBU_ICP, LBU_JCP, LBU_KCP,                         & 
@@ -1218,7 +1224,7 @@ SELECT CASE (CBUTYPE)
       IWORKGRID(:)       = 1
       WRITE(YGROUP_NAME,FMT="('RJS__',I4.4)") NBUTSHIFT
 !
-      CALL WRITE_DIACHRO(HFILEDIA, HLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
+      CALL WRITE_DIACHRO(TPDIAFILE, HLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
                 	 ZWORKDATIME, ZWORK, ZWORKTEMP, CBUCOMMENT(1, :),   &
 	        	 YWORKUNIT, YWORKCOMMENT,                           &
                          LBU_ICP, LBU_JCP, LBU_KCP,                         & 
@@ -1249,7 +1255,7 @@ SELECT CASE (CBUTYPE)
       IWORKGRID(:)       = 1
       WRITE(YGROUP_NAME,FMT="('TH___',I4.4)") NBUTSHIFT
 !
-      CALL WRITE_DIACHRO(HFILEDIA, HLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
+      CALL WRITE_DIACHRO(TPDIAFILE, HLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
                 	 ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(4, :),   &
 	         	 YWORKUNIT, YWORKCOMMENT,                           &
                          LBU_ICP, LBU_JCP, LBU_KCP,                         & 
@@ -1280,7 +1286,7 @@ SELECT CASE (CBUTYPE)
       IWORKGRID(:)       = 1
       WRITE(YGROUP_NAME,FMT="('TK___',I4.4)") NBUTSHIFT
 !
-      CALL WRITE_DIACHRO(HFILEDIA, HLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
+      CALL WRITE_DIACHRO(TPDIAFILE, HLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
                 	 ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(5, :),   &
 	        	 YWORKUNIT, YWORKCOMMENT,                           &
                          LBU_ICP, LBU_JCP, LBU_KCP,                         & 
@@ -1311,7 +1317,7 @@ SELECT CASE (CBUTYPE)
       IWORKGRID(:)       = 1
       WRITE(YGROUP_NAME,FMT="('RV___',I4.4)") NBUTSHIFT
 !
-      CALL WRITE_DIACHRO(HFILEDIA, HLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
+      CALL WRITE_DIACHRO(TPDIAFILE, HLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
                 	 ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(6, :),   &
 	        	 YWORKUNIT, YWORKCOMMENT,                           &
                          LBU_ICP, LBU_JCP, LBU_KCP,                         & 
@@ -1342,7 +1348,7 @@ SELECT CASE (CBUTYPE)
       IWORKGRID(:)       = 1
       WRITE(YGROUP_NAME,FMT="('RC___',I4.4)") NBUTSHIFT
 !
-      CALL WRITE_DIACHRO(HFILEDIA, HLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
+      CALL WRITE_DIACHRO(TPDIAFILE, HLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
                 	 ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(7, :),   &
 	        	 YWORKUNIT, YWORKCOMMENT,                           &
                          LBU_ICP, LBU_JCP, LBU_KCP,                         & 
@@ -1373,7 +1379,7 @@ SELECT CASE (CBUTYPE)
       IWORKGRID(:)       = 1
       WRITE(YGROUP_NAME,FMT="('RR___',I4.4)") NBUTSHIFT
 !
-      CALL WRITE_DIACHRO(HFILEDIA, HLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
+      CALL WRITE_DIACHRO(TPDIAFILE, HLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
                 	 ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(8, :),   &
 	        	 YWORKUNIT, YWORKCOMMENT,                           &
                          LBU_ICP, LBU_JCP, LBU_KCP,                         & 
@@ -1404,7 +1410,7 @@ SELECT CASE (CBUTYPE)
       IWORKGRID(:)       = 1
       WRITE(YGROUP_NAME,FMT="('RI___',I4.4)") NBUTSHIFT
 !
-      CALL WRITE_DIACHRO(HFILEDIA, HLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
+      CALL WRITE_DIACHRO(TPDIAFILE, HLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
                 	 ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(9, :),   &
 	        	 YWORKUNIT, YWORKCOMMENT,                           &
                          LBU_ICP, LBU_JCP, LBU_KCP,                         & 
@@ -1435,7 +1441,7 @@ SELECT CASE (CBUTYPE)
       IWORKGRID(:)       = 1
       WRITE(YGROUP_NAME,FMT="('RS___',I4.4)") NBUTSHIFT
 !
-      CALL WRITE_DIACHRO(HFILEDIA, HLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
+      CALL WRITE_DIACHRO(TPDIAFILE, HLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
                 	 ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(10, :),   &
 	        	 YWORKUNIT, YWORKCOMMENT,                           &
                          LBU_ICP, LBU_JCP, LBU_KCP,                         & 
@@ -1466,7 +1472,7 @@ SELECT CASE (CBUTYPE)
       IWORKGRID(:)       = 1
       WRITE(YGROUP_NAME,FMT="('RG___',I4.4)") NBUTSHIFT
 !
-      CALL WRITE_DIACHRO(HFILEDIA, HLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
+      CALL WRITE_DIACHRO(TPDIAFILE, HLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
                 	 ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(11, :),   &
 	         	 YWORKUNIT, YWORKCOMMENT,                           &
                          LBU_ICP, LBU_JCP, LBU_KCP,                         & 
@@ -1497,7 +1503,7 @@ SELECT CASE (CBUTYPE)
       IWORKGRID(:)       = 1
       WRITE(YGROUP_NAME,FMT="('RH___',I4.4)") NBUTSHIFT
 !
-      CALL WRITE_DIACHRO(HFILEDIA, HLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
+      CALL WRITE_DIACHRO(TPDIAFILE, HLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
                 	 ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(12, :),   &
 	        	 YWORKUNIT, YWORKCOMMENT,                           &
                          LBU_ICP, LBU_JCP, LBU_KCP,                         & 
@@ -1531,7 +1537,7 @@ SELECT CASE (CBUTYPE)
         IWORKGRID(:)       = 1
         WRITE(YGROUP_NAME,FMT="('SV',I3.3,I4.4)") JSV,NBUTSHIFT
 !
-        CALL WRITE_DIACHRO(HFILEDIA, HLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID,  &
+        CALL WRITE_DIACHRO(TPDIAFILE, HLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID,  &
                   	   ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(12+JSV,:),&
 		           YWORKUNIT, YWORKCOMMENT,                            &
                            LBU_ICP, LBU_JCP, LBU_KCP,                          &
diff --git a/src/MNH/write_diachro.f90 b/src/MNH/write_diachro.f90
index a007608e0..b1c8404f1 100644
--- a/src/MNH/write_diachro.f90
+++ b/src/MNH/write_diachro.f90
@@ -9,7 +9,7 @@
 ! MASDEV4_7 diachro 2006/05/18 13:07:25
 !-----------------------------------------------------------------
 !     #################################################################
-      SUBROUTINE WRITE_DIACHRO(HFILEDIA,HLUOUTDIA,HGROUP,HTYPE,      &
+      SUBROUTINE WRITE_DIACHRO(TPDIAFILE,HLUOUTDIA,HGROUP,HTYPE,      &
       KGRID,PDATIME,PVAR,PTRAJT,                                     &
       HTITRE,HUNITE,HCOMMENT,OICP,OJCP,OKCP,KIL,KIH,KJL,KJH,KKL,KKH, &
       PTRAJX,PTRAJY,PTRAJZ,PMASK)
@@ -84,36 +84,33 @@ USE MODI_MENU_DIACHRO
 USE MODD_PARAMETERS, ONLY : JPHEXT
 USE MODD_CONF
 USE MODD_BUDGET
-
+USE MODD_IO_ll, ONLY: TFILEDATA
+!
 IMPLICIT NONE
 !
 !*       0.1   Dummy arguments
 !              ---------------
-
-CHARACTER(LEN=*)              :: HFILEDIA,HLUOUTDIA
-CHARACTER(LEN=*)              :: HGROUP, HTYPE
-CHARACTER(LEN=*),DIMENSION(:) :: HTITRE, HUNITE, HCOMMENT
-
-INTEGER,DIMENSION(:)  :: KGRID
-INTEGER,OPTIONAL      :: KIL, KIH
-INTEGER,OPTIONAL      :: KJL, KJH
-INTEGER,OPTIONAL      :: KKL, KKH
-LOGICAL,OPTIONAL      :: OICP, OJCP, OKCP
-REAL,DIMENSION(:,:,:,:,:,:),OPTIONAL  :: PMASK
-REAL,DIMENSION(:,:,:,:,:,:)     :: PVAR
-REAL,DIMENSION(:,:)             :: PDATIME
-REAL,DIMENSION(:,:)             :: PTRAJT
-REAL,DIMENSION(:,:,:),OPTIONAL  :: PTRAJX
-REAL,DIMENSION(:,:,:),OPTIONAL  :: PTRAJY
-REAL,DIMENSION(:,:,:),OPTIONAL  :: PTRAJZ
-
+TYPE(TFILEDATA),              INTENT(IN)          :: TPDIAFILE    ! file to write
+CHARACTER(LEN=*),             INTENT(IN)          :: HLUOUTDIA
+CHARACTER(LEN=*),             INTENT(IN)          :: HGROUP, HTYPE
+INTEGER,DIMENSION(:),         INTENT(IN)          :: KGRID
+REAL,DIMENSION(:,:),          INTENT(IN)          :: PDATIME
+REAL,DIMENSION(:,:,:,:,:,:),  INTENT(IN)          :: PVAR
+REAL,DIMENSION(:,:),          INTENT(IN)          :: PTRAJT
+CHARACTER(LEN=*),DIMENSION(:),INTENT(IN)          :: HTITRE, HUNITE, HCOMMENT
+LOGICAL,                      INTENT(IN),OPTIONAL :: OICP, OJCP, OKCP
+INTEGER,                      INTENT(IN),OPTIONAL :: KIL, KIH
+INTEGER,                      INTENT(IN),OPTIONAL :: KJL, KJH
+INTEGER,                      INTENT(IN),OPTIONAL :: KKL, KKH
+REAL,DIMENSION(:,:,:),        INTENT(IN),OPTIONAL :: PTRAJX
+REAL,DIMENSION(:,:,:),        INTENT(IN),OPTIONAL :: PTRAJY
+REAL,DIMENSION(:,:,:),        INTENT(IN),OPTIONAL :: PTRAJZ
+REAL,DIMENSION(:,:,:,:,:,:),  INTENT(IN),OPTIONAL :: PMASK
 !
 !*       0.1   Local variables
 !              ---------------
-
-!
 CHARACTER(LEN=16) :: YRECFM
-CHARACTER(LEN=LEN(HFILEDIA)+4) :: YFILEDIA
+CHARACTER(LEN=28) :: YFILEDIA
 CHARACTER(LEN=20) :: YCOMMENT
 CHARACTER(LEN=3)  :: YJ
 INTEGER   ::   ILENG, ILENCH, ILENTITRE, ILENUNITE, ILENCOMMENT, ILE, IRESP
@@ -129,6 +126,8 @@ INTEGER,DIMENSION(:),ALLOCATABLE :: ITABCHAR
 LOGICAL   ::   GPACK
 !------------------------------------------------------------------------------
 !
+YFILEDIA = TPDIAFILE%CNAME
+!
 GPACK=LPACK
 LPACK=.FALSE.
 YCOMMENT='NOTHING'
@@ -226,13 +225,12 @@ IF(IRESP == -54)THEN
   IFTYPEDIA = 0; IVERBDIA = 5
 ENDIF
 !
-YFILEDIA=ADJUSTL(ADJUSTR(HFILEDIA)//'.lfi')
-CALL FMLOOK_ll(YFILEDIA,HLUOUTDIA,INUM,IRESPDIA)
+CALL FMLOOK_ll(ADJUSTL(ADJUSTR(YFILEDIA)//'.lfi'),HLUOUTDIA,INUM,IRESPDIA)
 IF (NVERB>=5) THEN
-  WRITE(ILUOUTDIA,*)' WRITE_DIACHRO: ',TRIM(YFILEDIA),' IRESPDIA=',IRESPDIA
+  WRITE(ILUOUTDIA,*)' WRITE_DIACHRO: ',TRIM(ADJUSTL(ADJUSTR(YFILEDIA)//'.lfi')),' IRESPDIA=',IRESPDIA
 ENDIF
 IF(IRESPDIA == -54)THEN
-  CALL FMOPEN_ll(HFILEDIA,'WRITE',HLUOUTDIA,INPRARDIA,IFTYPEDIA,IVERBDIA, &
+  CALL FMOPEN_ll(YFILEDIA,'WRITE',HLUOUTDIA,INPRARDIA,IFTYPEDIA,IVERBDIA, &
   ININARDIA,IRESPDIA)
 ENDIF
 !
@@ -242,7 +240,7 @@ YRECFM = ADJUSTL(ADJUSTR(HGROUP)//'.TYPE')
 
 #if defined(MNH_IOCDF4)
 
-CALL FMWRIT(HFILEDIA,YRECFM,HLUOUTDIA,'--',  &
+CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',  &
             HTYPE,KGRID(1),ILENCH,YCOMMENT,IRESPDIA)
 
 #else
@@ -252,8 +250,8 @@ ALLOCATE(ITABCHAR(ILENG))
 DO J = 1,ILENG
   ITABCHAR(J) = ICHAR(HTYPE(J:J))
 ENDDO
-!print *,SIZE(ITABCHAR),'  ITABCHAR ',ITABCHAR,' KGRID ',KGRID,HLUOUTDIA,HFILEDIA
-CALL FMWRIT(HFILEDIA,YRECFM,HLUOUTDIA,'--',  &
+!print *,SIZE(ITABCHAR),'  ITABCHAR ',ITABCHAR,' KGRID ',KGRID,HLUOUTDIA,YFILEDIA
+CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',  &
             ITABCHAR,KGRID(1),ILENCH,YCOMMENT,IRESPDIA)
 DEALLOCATE(ITABCHAR)
 
@@ -292,7 +290,7 @@ SELECT CASE(HTYPE)
     ITABCHAR(29)=IIMASK; ITABCHAR(30)=IJMASK
     ITABCHAR(31)=IKMASK; ITABCHAR(32)=ITMASK
     ITABCHAR(33)=INMASK; ITABCHAR(34)=IPMASK
-    CALL FMWRIT(HFILEDIA,YRECFM,HLUOUTDIA,'--',ITABCHAR, &
+    CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',ITABCHAR, &
                 KGRID(1),ILENCH,YCOMMENT,IRESPDIA)
     DEALLOCATE(ITABCHAR)
     IF (NVERB>=5) THEN
@@ -314,9 +312,9 @@ SELECT CASE(HTYPE)
     ITABCHAR(20)=IIMASK; ITABCHAR(21)=IJMASK
     ITABCHAR(22)=IKMASK; ITABCHAR(23)=ITMASK
     ITABCHAR(24)=INMASK; ITABCHAR(25)=IPMASK
-!   CALL FMWRIT(HFILEDIA,YRECFM,HLUOUTDIA,'--',ILENTITRE,ILENUNITE, &
+!   CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',ILENTITRE,ILENUNITE, &
 !   ILENCOMMENT,II,IJ,IK,IT,IN,IP,KGRID(1),ILENCH,YCOMMENT,IRESPDIA)
-    CALL FMWRIT(HFILEDIA,YRECFM,HLUOUTDIA,'--',ITABCHAR, &
+    CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',ITABCHAR, &
     KGRID(1),ILENCH,YCOMMENT,IRESPDIA)
     DEALLOCATE(ITABCHAR)
 END SELECT
@@ -329,7 +327,7 @@ ENDIF
 YRECFM = ADJUSTL(ADJUSTR(HGROUP)//'.TITRE')
 #if defined(MNH_IOCDF4)
 
-CALL FMWRIT(HFILEDIA,YRECFM,HLUOUTDIA,'--',  &
+CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',  &
             HTITRE(1:IP),KGRID(1),ILENCH,YCOMMENT,IRESPDIA)
 
 #else
@@ -345,7 +343,7 @@ DO JJ = 1,IP
     WRITE(ILUOUTDIA,*)JJ,TRIM(HTITRE(JJ))
   ENDIF
 ENDDO
-CALL FMWRIT(HFILEDIA,YRECFM,HLUOUTDIA,'--',  &
+CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',  &
             ITABCHAR,KGRID(1),ILENCH,YCOMMENT,IRESPDIA)
 DEALLOCATE(ITABCHAR)
 
@@ -360,7 +358,7 @@ ENDIF
 YRECFM = ADJUSTL(ADJUSTR(HGROUP)//'.UNITE')
 #if defined(MNH_IOCDF4)
 
-CALL FMWRIT(HFILEDIA,YRECFM,HLUOUTDIA,'--',  &
+CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',  &
             HUNITE(1:IP),KGRID(1),ILENCH,YCOMMENT,IRESPDIA)
 
 #else
@@ -376,7 +374,7 @@ DO JJ = 1,IP
     WRITE(ILUOUTDIA,*)JJ,TRIM(HUNITE(JJ))
   ENDIF
 ENDDO
-CALL FMWRIT(HFILEDIA,YRECFM,HLUOUTDIA,'--',  &
+CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',  &
             ITABCHAR,KGRID(1),ILENCH,YCOMMENT,IRESPDIA)
 DEALLOCATE(ITABCHAR)
 
@@ -392,7 +390,7 @@ YRECFM = ADJUSTL(ADJUSTR(HGROUP)//'.COMMENT')
 
 #if defined(MNH_IOCDF4)
 
-CALL FMWRIT(HFILEDIA,YRECFM,HLUOUTDIA,'--',  &
+CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',  &
             HCOMMENT(1:IP),KGRID(1),ILENCH,YCOMMENT,IRESPDIA)
 
 #else
@@ -408,7 +406,7 @@ DO JJ = 1,IP
     WRITE(ILUOUTDIA,*)JJ,TRIM(HCOMMENT(JJ))
   ENDIF
 ENDDO
-CALL FMWRIT(HFILEDIA,YRECFM,HLUOUTDIA,'--',  &
+CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',  &
             ITABCHAR,KGRID(1),ILENCH,YCOMMENT,IRESPDIA)
 DEALLOCATE(ITABCHAR)
 
@@ -440,14 +438,14 @@ DO J = 1,IP
 ! BUG ...ca passe que si PRESENT(OICP) sinon OICP non defini 
 IF (PRESENT(OICP) .AND. PRESENT(OJCP)) THEN
   IF(HTYPE == 'CART' .AND. .NOT. OICP .AND. .NOT. OJCP) THEN
-    CALL FMWRITBOX(HFILEDIA,YRECFM,HLUOUTDIA,'BUDGET',PVAR(:,:,:,:,:,J),KGRID(J), &
+    CALL FMWRITBOX(YFILEDIA,YRECFM,HLUOUTDIA,'BUDGET',PVAR(:,:,:,:,:,J),KGRID(J), &
                    HTITRE(J),KIL+JPHEXT,KIH+JPHEXT,KJL+JPHEXT,KJH+JPHEXT,IRESPDIA)
   ELSE
-    CALL FMWRIT(HFILEDIA,YRECFM,HLUOUTDIA,'--',PVAR(:,:,:,:,:,J),KGRID(J),   &
+    CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',PVAR(:,:,:,:,:,J),KGRID(J),   &
                 LEN(HTITRE(J)),HTITRE(J),IRESPDIA)
   ENDIF
 ELSE
-  CALL FMWRIT(HFILEDIA,YRECFM,HLUOUTDIA,'--',PVAR(:,:,:,:,:,J),KGRID(J),   &
+  CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',PVAR(:,:,:,:,:,J),KGRID(J),   &
                 LEN(HTITRE(J)),HTITRE(J),IRESPDIA)
 END IF
   IF (NVERB>=5) THEN
@@ -462,7 +460,7 @@ ENDIF
 !
 YRECFM = ADJUSTL(ADJUSTR(HGROUP)//'.TRAJT')
 ILENG = IT*INTRAJT
-CALL FMWRIT(HFILEDIA,YRECFM,HLUOUTDIA,'--',  &
+CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',  &
             PTRAJT,KGRID(1),ILENCH,YCOMMENT,IRESPDIA)
 IF (NVERB>=5) THEN
   WRITE(ILUOUTDIA,*)'  7th ENREGISTREMENT(',TRIM(YRECFM),'): OK'
@@ -476,7 +474,7 @@ ENDIF
 IF(PRESENT(PTRAJX))THEN
   YRECFM = ADJUSTL(ADJUSTR(HGROUP)//'.TRAJX')
   ILENG = IKTRAJX*ITTRAJX*INTRAJX
-  CALL FMWRIT(HFILEDIA,YRECFM,HLUOUTDIA,'--',  &
+  CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',  &
               PTRAJX,KGRID(1),ILENCH,YCOMMENT,IRESPDIA)
 ENDIF
 !
@@ -485,7 +483,7 @@ ENDIF
 IF(PRESENT(PMASK))THEN
   YRECFM = ADJUSTL(ADJUSTR(HGROUP)//'.MASK')
   ILENG = IIMASK*IJMASK*IKMASK*ITMASK*INMASK*IPMASK
-  CALL FMWRIT(HFILEDIA,YRECFM,HLUOUTDIA,'XY',PMASK,KGRID(1),  &
+  CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'XY',PMASK,KGRID(1),  &
               ILENCH,YCOMMENT,IRESPDIA)
 ENDIF
 !
@@ -494,7 +492,7 @@ ENDIF
 IF(PRESENT(PTRAJY))THEN
   YRECFM = ADJUSTL(ADJUSTR(HGROUP)//'.TRAJY')
   ILENG = IKTRAJY*ITTRAJY*INTRAJY
-  CALL FMWRIT(HFILEDIA,YRECFM,HLUOUTDIA,'--',  &
+  CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',  &
               PTRAJY,KGRID(1),ILENCH,YCOMMENT,IRESPDIA)
 ENDIF
 !
@@ -503,7 +501,7 @@ ENDIF
 IF(PRESENT(PTRAJZ))THEN
   YRECFM = ADJUSTL(ADJUSTR(HGROUP)//'.TRAJZ')
   ILENG = IKTRAJZ*ITTRAJZ*INTRAJZ
-  CALL FMWRIT(HFILEDIA,YRECFM,HLUOUTDIA,'--',  &
+  CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',  &
               PTRAJZ,KGRID(1),ILENCH,YCOMMENT,IRESPDIA)
 ENDIF
 !
@@ -511,10 +509,10 @@ ENDIF
 !
 YRECFM = ADJUSTL(ADJUSTR(HGROUP)//'.DATIM')
 ILENG=16*IT
-CALL FMWRIT(HFILEDIA,YRECFM,HLUOUTDIA,'--',  &
+CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',  &
             PDATIME,KGRID(1),ILENCH,YCOMMENT,IRESPDIA)
 !
-CALL MENU_DIACHRO(HFILEDIA,HLUOUTDIA,HGROUP)
+CALL MENU_DIACHRO(TPDIAFILE,HLUOUTDIA,HGROUP)
 LPACK=GPACK
 !-----------------------------------------------------------------------------
 !
diff --git a/src/MNH/write_les_budgetn.f90 b/src/MNH/write_les_budgetn.f90
index c07e5520d..3f2883415 100644
--- a/src/MNH/write_les_budgetn.f90
+++ b/src/MNH/write_les_budgetn.f90
@@ -14,8 +14,11 @@ MODULE MODI_WRITE_LES_BUDGET_n
 !
 INTERFACE
 !
-      SUBROUTINE  WRITE_LES_BUDGET_n(HLES_AVG)
+      SUBROUTINE  WRITE_LES_BUDGET_n(TPDIAFILE,HLES_AVG)
 !
+USE MODD_IO_ll, ONLY: TFILEDATA
+!
+TYPE(TFILEDATA),  INTENT(IN) :: TPDIAFILE! file to write
 CHARACTER(LEN=1), INTENT(IN) :: HLES_AVG ! flag to perform the averages
 !                                        ! or normalizations
 END SUBROUTINE WRITE_LES_BUDGET_n
@@ -25,7 +28,7 @@ END INTERFACE
 END MODULE MODI_WRITE_LES_BUDGET_n
 
 !     ######################
-      SUBROUTINE  WRITE_LES_BUDGET_n(HLES_AVG)
+      SUBROUTINE  WRITE_LES_BUDGET_n(TPDIAFILE,HLES_AVG)
 !     ######################
 !
 !
@@ -59,6 +62,7 @@ END MODULE MODI_WRITE_LES_BUDGET_n
 !          ------------
 !
 USE MODD_CST
+USE MODD_IO_ll, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_LES_n
 USE MODD_CONF_n
@@ -76,6 +80,7 @@ IMPLICIT NONE
 !
 !*      0.1  declarations of arguments
 !
+TYPE(TFILEDATA),  INTENT(IN) :: TPDIAFILE! file to write
 CHARACTER(LEN=1), INTENT(IN) :: HLES_AVG ! flag to perform the averages
 !                                        ! or normalizations
 !
@@ -415,7 +420,8 @@ END DO
 !       -------
 !
 !
-CALL LES_DIACHRO_MASKS(YGROUP,YSUBTITLE(:ILES),"resolved KE budget"//YSUBTITLE(:ILES),"m2/s3",ZLES_BUDGET(:,:,:ILES),HLES_AVG)
+CALL LES_DIACHRO_MASKS(TPDIAFILE,YGROUP,YSUBTITLE(:ILES),"resolved KE budget"//YSUBTITLE(:ILES),"m2/s3", &
+                       ZLES_BUDGET(:,:,:ILES),HLES_AVG)
 !
 !-------------------------------------------------------------------------------
 !
@@ -661,7 +667,8 @@ ZLES_BUDGET(NLES_K,:,ILES) = ZLES_BUDGET(NLES_K-1,:,ILES)
 !       -------
 !
 !
-CALL LES_DIACHRO_MASKS(YGROUP,YSUBTITLE(:ILES),"thetal variance budget"//YSUBTITLE(:ILES),"K2/s",ZLES_BUDGET(:,:,:ILES),HLES_AVG)
+CALL LES_DIACHRO_MASKS(TPDIAFILE,YGROUP,YSUBTITLE(:ILES),"thetal variance budget"//YSUBTITLE(:ILES),"K2/s", &
+                       ZLES_BUDGET(:,:,:ILES),HLES_AVG)
 !
 !-------------------------------------------------------------------------------
 !
@@ -970,7 +977,8 @@ ZLES_BUDGET(:,:,ILES)=-XLES_RES_ddxa_Thl_SBG_UaW(:,:,1)       &
 !       -------
 !
 !
-CALL LES_DIACHRO_MASKS(YGROUP,YSUBTITLE(:ILES),"thetal flux budget"//YSUBTITLE(:ILES),"mK/s2",ZLES_BUDGET(:,:,:ILES),HLES_AVG)
+CALL LES_DIACHRO_MASKS(TPDIAFILE,YGROUP,YSUBTITLE(:ILES),"thetal flux budget"//YSUBTITLE(:ILES),"mK/s2", &
+                       ZLES_BUDGET(:,:,:ILES),HLES_AVG)
 !
 !
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/write_les_rt_budgetn.f90 b/src/MNH/write_les_rt_budgetn.f90
index 14a1d9cb0..886a85f29 100644
--- a/src/MNH/write_les_rt_budgetn.f90
+++ b/src/MNH/write_les_rt_budgetn.f90
@@ -14,10 +14,13 @@ MODULE MODI_WRITE_LES_RT_BUDGET_n
 !
 INTERFACE
 !
-      SUBROUTINE  WRITE_LES_RT_BUDGET_n(HLES_AVG)
+      SUBROUTINE  WRITE_LES_RT_BUDGET_n(TPDIAFILE,HLES_AVG)
 !
-CHARACTER(LEN=1), INTENT(IN) :: HLES_AVG ! flag to perform the averages
-!                                        ! or normalizations
+USE MODD_IO_ll, ONLY: TFILEDATA
+!
+TYPE(TFILEDATA),  INTENT(IN) :: TPDIAFILE ! file to write
+CHARACTER(LEN=1), INTENT(IN) :: HLES_AVG  ! flag to perform the averages
+!                                         ! or normalizations
 END SUBROUTINE WRITE_LES_RT_BUDGET_n
 !
 END INTERFACE
@@ -25,7 +28,7 @@ END INTERFACE
 END MODULE MODI_WRITE_LES_RT_BUDGET_n
 !
 !     ######################
-      SUBROUTINE  WRITE_LES_RT_BUDGET_n(HLES_AVG)
+      SUBROUTINE  WRITE_LES_RT_BUDGET_n(TPDIAFILE,HLES_AVG)
 !     ######################
 !
 !
@@ -58,6 +61,7 @@ END MODULE MODI_WRITE_LES_RT_BUDGET_n
 !          ------------
 !
 USE MODD_CST
+USE MODD_IO_ll, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_LES_n
 USE MODD_LES_BUDGET
@@ -74,8 +78,9 @@ IMPLICIT NONE
 !
 !*      0.1  declarations of arguments
 !
-CHARACTER(LEN=1), INTENT(IN) :: HLES_AVG ! flag to perform the averages
-!                                        ! or normalizations
+TYPE(TFILEDATA),  INTENT(IN) :: TPDIAFILE ! file to write
+CHARACTER(LEN=1), INTENT(IN) :: HLES_AVG  ! flag to perform the averages
+!                                         ! or normalizations
 !
 !
 !*      0.2  declaration of local variables
@@ -345,7 +350,8 @@ ZLES_BUDGET(NLES_K,:,ILES) = ZLES_BUDGET(NLES_K-1,:,ILES)
 !       -------
 !
 !
-CALL LES_DIACHRO_MASKS(YGROUP,YSUBTITLE(:ILES),"Rt variance budget"//YSUBTITLE(:ILES),"kg2/kg2/s",ZLES_BUDGET(:,:,:ILES),HLES_AVG)
+CALL LES_DIACHRO_MASKS(TPDIAFILE,YGROUP,YSUBTITLE(:ILES),"Rt variance budget"//YSUBTITLE(:ILES),"kg2/kg2/s", &
+                       ZLES_BUDGET(:,:,:ILES),HLES_AVG)
 !
 !
 !-------------------------------------------------------------------------------
@@ -651,7 +657,8 @@ ZLES_BUDGET(:,:,ILES)=-XLES_RES_ddxa_Rt_SBG_UaW(:,:,1)       &
 !       -------
 !
 !
-CALL LES_DIACHRO_MASKS(YGROUP,YSUBTITLE(:ILES),"Rt flux budget"//YSUBTITLE(:ILES),"mkg/kg/s2",ZLES_BUDGET(:,:,:ILES),HLES_AVG)
+CALL LES_DIACHRO_MASKS(TPDIAFILE,YGROUP,YSUBTITLE(:ILES),"Rt flux budget"//YSUBTITLE(:ILES),"mkg/kg/s2", &
+                       ZLES_BUDGET(:,:,:ILES),HLES_AVG)
 !
 !
 !-------------------------------------------------------------------------------
@@ -897,7 +904,7 @@ ZLES_BUDGET(NLES_K,:,ILES) = ZLES_BUDGET(NLES_K-1,:,ILES)
 !       -------
 !
 !
-CALL LES_DIACHRO_MASKS(YGROUP,YSUBTITLE(:ILES),"Thl-Rt covariance budget"//YSUBTITLE(:ILES), &
+CALL LES_DIACHRO_MASKS(TPDIAFILE,YGROUP,YSUBTITLE(:ILES),"Thl-Rt covariance budget"//YSUBTITLE(:ILES), &
                                               "Kkg/kg/s",ZLES_BUDGET(:,:,:ILES),HLES_AVG)
 !
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/write_les_sv_budgetn.f90 b/src/MNH/write_les_sv_budgetn.f90
index 2ea5623c7..a3270c831 100644
--- a/src/MNH/write_les_sv_budgetn.f90
+++ b/src/MNH/write_les_sv_budgetn.f90
@@ -14,10 +14,13 @@ MODULE MODI_WRITE_LES_SV_BUDGET_n
 !
 INTERFACE
 !
-      SUBROUTINE  WRITE_LES_SV_BUDGET_n(HLES_AVG)
+      SUBROUTINE  WRITE_LES_SV_BUDGET_n(TPDIAFILE,HLES_AVG)
 !
-CHARACTER(LEN=1), INTENT(IN) :: HLES_AVG ! flag to perform the averages
-!                                        ! or normalizations
+USE MODD_IO_ll, ONLY: TFILEDATA
+!
+TYPE(TFILEDATA),  INTENT(IN) :: TPDIAFILE ! file to write
+CHARACTER(LEN=1), INTENT(IN) :: HLES_AVG  ! flag to perform the averages
+!                                         ! or normalizations
 END SUBROUTINE WRITE_LES_SV_BUDGET_n
 !
 END INTERFACE
@@ -25,7 +28,7 @@ END INTERFACE
 END MODULE MODI_WRITE_LES_SV_BUDGET_n
 
 !     ######################
-      SUBROUTINE  WRITE_LES_SV_BUDGET_n(HLES_AVG)
+      SUBROUTINE  WRITE_LES_SV_BUDGET_n(TPDIAFILE,HLES_AVG)
 !     ######################
 !
 !
@@ -58,6 +61,7 @@ END MODULE MODI_WRITE_LES_SV_BUDGET_n
 !          ------------
 !
 USE MODD_CST
+USE MODD_IO_ll, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_LES_n
 USE MODD_CONF_n
@@ -76,9 +80,9 @@ IMPLICIT NONE
 !
 !*      0.1  declarations of arguments
 !
-CHARACTER(LEN=1), INTENT(IN) :: HLES_AVG ! flag to perform the averages
-!                                        ! or normalizations
-!
+TYPE(TFILEDATA),  INTENT(IN) :: TPDIAFILE ! file to write
+CHARACTER(LEN=1), INTENT(IN) :: HLES_AVG  ! flag to perform the averages
+!                                         ! or normalizations
 !
 !*      0.2  declaration of local variables
 !
@@ -389,7 +393,7 @@ DO JSV=1,NSV
 END DO
 
 YTITLE = "Sv variance budget  "
-CALL LES_DIACHRO_SV_MASKS(YGROUP,YSUBTITLE(:ILES),YTITLE//YSUBTITLE(:ILES),"kg2/kg2/s",ZSV_BUDGET,HLES_AVG)
+CALL LES_DIACHRO_SV_MASKS(TPDIAFILE,YGROUP,YSUBTITLE(:ILES),YTITLE//YSUBTITLE(:ILES),"kg2/kg2/s",ZSV_BUDGET,HLES_AVG)
 !
 DEALLOCATE(ZSV_BUDGET)
 !-------------------------------------------------------------------------------
@@ -759,7 +763,7 @@ DO JSV=1,NSV
 END DO
 
 YTITLE = "Sv flux budget      "
-CALL LES_DIACHRO_SV_MASKS(YGROUP,YSUBTITLE(:ILES),YTITLE//YSUBTITLE(:ILES),"mkg/kg/s2",ZSV_BUDGET,HLES_AVG)
+CALL LES_DIACHRO_SV_MASKS(TPDIAFILE,YGROUP,YSUBTITLE(:ILES),YTITLE//YSUBTITLE(:ILES),"mkg/kg/s2",ZSV_BUDGET,HLES_AVG)
 !
 DEALLOCATE(ZSV_BUDGET)
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/write_lesn.f90 b/src/MNH/write_lesn.f90
index 0da9df148..1a01c9d12 100644
--- a/src/MNH/write_lesn.f90
+++ b/src/MNH/write_lesn.f90
@@ -10,8 +10,11 @@ MODULE MODI_WRITE_LES_n
 !
 INTERFACE
 !
-      SUBROUTINE  WRITE_LES_n(HLES_AVG)
+      SUBROUTINE  WRITE_LES_n(TPDIAFILE,HLES_AVG)
 !
+USE MODD_IO_ll, ONLY: TFILEDATA
+!
+TYPE(TFILEDATA),  INTENT(IN) :: TPDIAFILE! file to write
 CHARACTER(LEN=1), INTENT(IN) :: HLES_AVG ! flag to perform the averages
 !                                        ! or normalizations
 END SUBROUTINE WRITE_LES_n
@@ -21,7 +24,7 @@ END INTERFACE
 END MODULE MODI_WRITE_LES_n
 
 !     ######################
-      SUBROUTINE  WRITE_LES_n(HLES_AVG)
+      SUBROUTINE  WRITE_LES_n(TPDIAFILE,HLES_AVG)
 !     ######################
 !
 !
@@ -60,6 +63,7 @@ END MODULE MODI_WRITE_LES_n
 !          ------------
 !
 USE MODD_CST
+USE MODD_IO_ll, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_LES_n
 USE MODD_FIELD_n
@@ -77,19 +81,19 @@ USE MODE_ll
 USE MODE_FM
 !
 USE MODE_LES_DIACHRO
+USE MODE_LES_SPEC_N
 USE MODE_MODELN_HANDLER
 !
 USE MODI_WRITE_LES_BUDGET_n
 USE MODI_WRITE_LES_RT_BUDGET_n
 USE MODI_WRITE_LES_SV_BUDGET_n
 !
-USE MODI_LES_SPEC_N
-!
 IMPLICIT NONE
 !
 !
 !*      0.1  declarations of arguments
 !
+TYPE(TFILEDATA),  INTENT(IN) :: TPDIAFILE! file to write
 CHARACTER(LEN=1), INTENT(IN) :: HLES_AVG ! flag to perform the averages
 !                                        ! or normalizations
 !
@@ -235,7 +239,6 @@ NLES_CURRENT_JSUP=NLESn_JSUP(IMI)
 XLES_CURRENT_DOMEGAX=XDXHAT(1)
 XLES_CURRENT_DOMEGAY=XDYHAT(1)
 !
-CCURRENT_FMDIAC = CFMDIAC
 !
 !
 !*      2.   (z,t) profiles (all masks)
@@ -280,13 +283,13 @@ IF (HLES_AVG==' ' .OR. HLES_AVG=='A') THEN
   ZUND_PTS_ll(:,:,:) = NLES_UND_PTS_ll(:,:,:)
   ZCART_PTS_ll       = (NLESn_ISUP(IMI)-NLESn_IINF(IMI)+1) * (NLESn_JSUP(IMI)-NLESn_JINF(IMI)+1)
   !
-  CALL LES_DIACHRO_MASKS("AVG_PTS  ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"AVG_PTS  ",YSUBTITLE(:), &
   "number of points used for averaging"//YSUBTITLE(:),"-",ZAVG_PTS_ll,HLES_AVG)
-  CALL LES_DIACHRO_MASKS("AVG_PTSF",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"AVG_PTSF",YSUBTITLE(:), &
   "fraction of points used for averaging"//YSUBTITLE(:),"-",ZAVG_PTS_ll/ZCART_PTS_ll,HLES_AVG)
-  CALL LES_DIACHRO_MASKS("UND_PTS  ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"UND_PTS  ",YSUBTITLE(:), &
   "number of points below orography"//YSUBTITLE(:),"-",ZUND_PTS_ll,HLES_AVG)
-  CALL LES_DIACHRO_MASKS("UND_PTSF",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"UND_PTSF",YSUBTITLE(:), &
   "fraction of points below orography"//YSUBTITLE(:),"-",ZUND_PTS_ll/ZCART_PTS_ll,HLES_AVG)
   !
   DEALLOCATE(ZAVG_PTS_ll)
@@ -297,157 +300,157 @@ END IF
 !*      2.1  mean quantities
 !            ---------------
 !
-CALL LES_DIACHRO_MASKS("MEAN_U  ",YSUBTITLE(:), &
+CALL LES_DIACHRO_MASKS(TPDIAFILE,"MEAN_U  ",YSUBTITLE(:), &
   "Mean U Profile"//YSUBTITLE(:)," m/s",XLES_MEAN_U,HLES_AVG)
 
-CALL LES_DIACHRO_MASKS("MEAN_V  ",YSUBTITLE(:), &
+CALL LES_DIACHRO_MASKS(TPDIAFILE,"MEAN_V  ",YSUBTITLE(:), &
   "Mean V Profile"//YSUBTITLE(:)," m/s",XLES_MEAN_V,HLES_AVG)
 
-CALL LES_DIACHRO_MASKS("MEAN_W  ",YSUBTITLE(:), &
+CALL LES_DIACHRO_MASKS(TPDIAFILE,"MEAN_W  ",YSUBTITLE(:), &
   "Mean W Profile"//YSUBTITLE(:)," m/s",XLES_MEAN_W,HLES_AVG)
 
-CALL LES_DIACHRO_MASKS("MEAN_PRE",YSUBTITLE(:), &
+CALL LES_DIACHRO_MASKS(TPDIAFILE,"MEAN_PRE",YSUBTITLE(:), &
   "Mean pressure Profile"//YSUBTITLE(:)," Pa",XLES_MEAN_P,HLES_AVG)
 
-CALL LES_DIACHRO_MASKS("MEAN_DP",YSUBTITLE(:), &
+CALL LES_DIACHRO_MASKS(TPDIAFILE,"MEAN_DP",YSUBTITLE(:), &
   "Mean Dyn production TKE Profile"//YSUBTITLE(:)," m2/s3",XLES_MEAN_DP,HLES_AVG)
 
-CALL LES_DIACHRO_MASKS("MEAN_TP",YSUBTITLE(:), &
+CALL LES_DIACHRO_MASKS(TPDIAFILE,"MEAN_TP",YSUBTITLE(:), &
   "Mean Thermal  production TKE Profile "//YSUBTITLE(:)," m2/s3",XLES_MEAN_TP,HLES_AVG)
 
-CALL LES_DIACHRO_MASKS("MEAN_TR",YSUBTITLE(:), &
+CALL LES_DIACHRO_MASKS(TPDIAFILE,"MEAN_TR",YSUBTITLE(:), &
   "Mean transport production TKE Profile"//YSUBTITLE(:)," m2/s3",XLES_MEAN_TR,HLES_AVG)
 
-CALL LES_DIACHRO_MASKS("MEAN_DISS",YSUBTITLE(:), &
+CALL LES_DIACHRO_MASKS(TPDIAFILE,"MEAN_DISS",YSUBTITLE(:), &
   "Mean Dissipation TKE Profile"//YSUBTITLE(:)," m2/s3",XLES_MEAN_DISS,HLES_AVG)
 
-CALL LES_DIACHRO_MASKS("MEAN_LM",YSUBTITLE(:), &
+CALL LES_DIACHRO_MASKS(TPDIAFILE,"MEAN_LM",YSUBTITLE(:), &
   "Mean mixing length Profile"//YSUBTITLE(:)," m",XLES_MEAN_LM,HLES_AVG)
 
-CALL LES_DIACHRO_MASKS("MEAN_RHO",YSUBTITLE(:), &
+CALL LES_DIACHRO_MASKS(TPDIAFILE,"MEAN_RHO",YSUBTITLE(:), &
   "Mean density Profile"//YSUBTITLE(:)," kg/m3",XLES_MEAN_RHO,HLES_AVG)
 
-CALL LES_DIACHRO_MASKS("MEAN_TH ",YSUBTITLE(:),&
+CALL LES_DIACHRO_MASKS(TPDIAFILE,"MEAN_TH ",YSUBTITLE(:),&
   "Mean potential temperature Profile"//YSUBTITLE(:)," K",XLES_MEAN_Th,HLES_AVG)
 
-CALL LES_DIACHRO_MASKS("MEAN_MF ",YSUBTITLE(:),&
+CALL LES_DIACHRO_MASKS(TPDIAFILE,"MEAN_MF ",YSUBTITLE(:),&
   "Mass-flux Profile"//YSUBTITLE(:)," m s-1",XLES_MEAN_Mf,HLES_AVG)
 
 IF (LUSERC) &
-CALL LES_DIACHRO_MASKS("MEAN_THL",YSUBTITLE(:), &
+CALL LES_DIACHRO_MASKS(TPDIAFILE,"MEAN_THL",YSUBTITLE(:), &
    "Mean liquid potential temperature Profile"//YSUBTITLE(:)," K",XLES_MEAN_Thl,HLES_AVG)
 
 IF (LUSERV) &
-CALL LES_DIACHRO_MASKS("MEAN_THV",YSUBTITLE(:), &
+CALL LES_DIACHRO_MASKS(TPDIAFILE,"MEAN_THV",YSUBTITLE(:), &
    "Mean virtual potential temperature Profile"//YSUBTITLE(:)," K",XLES_MEAN_Thv,HLES_AVG)
 
 IF (LUSERC) &
-CALL LES_DIACHRO_MASKS("MEAN_RT ",YSUBTITLE(:), &
+CALL LES_DIACHRO_MASKS(TPDIAFILE,"MEAN_RT ",YSUBTITLE(:), &
   "Mean Rt Profile"//YSUBTITLE(:)," kg/kg",XLES_MEAN_Rt,HLES_AVG)
 
 IF (LUSERV) &
-CALL LES_DIACHRO_MASKS("MEAN_RV ",YSUBTITLE(:), &
+CALL LES_DIACHRO_MASKS(TPDIAFILE,"MEAN_RV ",YSUBTITLE(:), &
   "Mean Rv Profile"//YSUBTITLE(:)," kg/kg",XLES_MEAN_Rv,HLES_AVG)
 
 IF (LUSERV) &
-CALL LES_DIACHRO_MASKS("MEAN_REHU ",YSUBTITLE(:), &
+CALL LES_DIACHRO_MASKS(TPDIAFILE,"MEAN_REHU ",YSUBTITLE(:), &
   "Mean Rh Profile"//YSUBTITLE(:)," %",XLES_MEAN_Rehu,HLES_AVG)
 
 IF (LUSERV) &
-CALL LES_DIACHRO_MASKS("MEAN_QS ",YSUBTITLE(:), &
+CALL LES_DIACHRO_MASKS(TPDIAFILE,"MEAN_QS ",YSUBTITLE(:), &
   "Mean Qs Profile"//YSUBTITLE(:)," kg/kg",XLES_MEAN_Qs,HLES_AVG)
 
 IF (LUSERC) &
-CALL LES_DIACHRO_MASKS("MEAN_KHT ",YSUBTITLE(:),&
+CALL LES_DIACHRO_MASKS(TPDIAFILE,"MEAN_KHT ",YSUBTITLE(:),&
   "Eddy-diffusivity (temperature) Profile"//YSUBTITLE(:)," m2 s-1",XLES_MEAN_KHt,HLES_AVG)
 
 IF (LUSERC) &
-CALL LES_DIACHRO_MASKS("MEAN_KHR ",YSUBTITLE(:),&
+CALL LES_DIACHRO_MASKS(TPDIAFILE,"MEAN_KHR ",YSUBTITLE(:),&
   "Eddy-diffusivity (wvapor) Profile"//YSUBTITLE(:)," m2 s-1",XLES_MEAN_KHr,HLES_AVG)  
 
 IF (LUSERC) &
-CALL LES_DIACHRO_MASKS("MEAN_RC ",YSUBTITLE(:), &
+CALL LES_DIACHRO_MASKS(TPDIAFILE,"MEAN_RC ",YSUBTITLE(:), &
   "Mean Rc Profile"//YSUBTITLE(:)," kg/kg",XLES_MEAN_Rc,HLES_AVG)
 
 IF (LUSERC) &
-CALL LES_DIACHRO_MASKS("MEAN_CF ",YSUBTITLE(:), &
+CALL LES_DIACHRO_MASKS(TPDIAFILE,"MEAN_CF ",YSUBTITLE(:), &
   "Mean Cf Profile"//YSUBTITLE(:)," ",XLES_MEAN_Cf,HLES_AVG)
 
 IF (LUSERC) &
-CALL LES_DIACHRO_MASKS("MEAN_INDCF ",YSUBTITLE(:), &
+CALL LES_DIACHRO_MASKS(TPDIAFILE,"MEAN_INDCF ",YSUBTITLE(:), &
   "Mean Cf>1-6 Profile (0 ou 1)"//YSUBTITLE(:)," ",XLES_MEAN_INDCf,HLES_AVG)
 
 IF (LUSERC) &
-CALL LES_DIACHRO_MASKS("MEAN_INDCF2 ",YSUBTITLE(:), &
+CALL LES_DIACHRO_MASKS(TPDIAFILE,"MEAN_INDCF2 ",YSUBTITLE(:), &
   "Mean Cf>1-5 Profile (0 ou 1)"//YSUBTITLE(:)," ",XLES_MEAN_INDCf2,HLES_AVG)
 
 IF (LUSERR) &
-CALL LES_DIACHRO_MASKS("MEAN_RR ",YSUBTITLE(:), &
+CALL LES_DIACHRO_MASKS(TPDIAFILE,"MEAN_RR ",YSUBTITLE(:), &
   "Mean Rr Profile"//YSUBTITLE(:)," kg/kg",XLES_MEAN_Rr,HLES_AVG)
 
 IF (LUSERI) &
-CALL LES_DIACHRO_MASKS("MEAN_RI ",YSUBTITLE(:), &
+CALL LES_DIACHRO_MASKS(TPDIAFILE,"MEAN_RI ",YSUBTITLE(:), &
   "Mean Ri Profile"//YSUBTITLE(:)," kg/kg",XLES_MEAN_Ri,HLES_AVG)
 
 IF (LUSERS) &
-CALL LES_DIACHRO_MASKS("MEAN_RS ",YSUBTITLE(:), &
+CALL LES_DIACHRO_MASKS(TPDIAFILE,"MEAN_RS ",YSUBTITLE(:), &
   "Mean Rs Profile"//YSUBTITLE(:)," kg/kg",XLES_MEAN_Rs,HLES_AVG)
 
 IF (LUSERG) &
-CALL LES_DIACHRO_MASKS("MEAN_RG ",YSUBTITLE(:), &
+CALL LES_DIACHRO_MASKS(TPDIAFILE,"MEAN_RG ",YSUBTITLE(:), &
   "Mean Rg Profile"//YSUBTITLE(:)," kg/kg",XLES_MEAN_Rg,HLES_AVG)
 
 IF (LUSERH) &
-CALL LES_DIACHRO_MASKS("MEAN_RH ",YSUBTITLE(:), &
+CALL LES_DIACHRO_MASKS(TPDIAFILE,"MEAN_RH ",YSUBTITLE(:), &
   "Mean Rh Profile"//YSUBTITLE(:)," kg/kg",XLES_MEAN_Rh,HLES_AVG)
 
 IF (NSV>0) &
-CALL LES_DIACHRO_SV_MASKS("MEAN_SV ",YSUBTITLE(:), &
+CALL LES_DIACHRO_SV_MASKS(TPDIAFILE,"MEAN_SV ",YSUBTITLE(:), &
   "Mean Sv Profiles"//YSUBTITLE(:)," kg/kg",XLES_MEAN_Sv,HLES_AVG)
 
-CALL LES_DIACHRO_MASKS("MEANWIND",YSUBTITLE(:), &
+CALL LES_DIACHRO_MASKS(TPDIAFILE,"MEANWIND",YSUBTITLE(:), &
   "Profile of Mean Modulus of Wind"//YSUBTITLE(:)," m/s",XLES_MEAN_WIND,HLES_AVG)
 !
-CALL LES_DIACHRO_MASKS("MEANMSFX",YSUBTITLE(:),  &
+CALL LES_DIACHRO_MASKS(TPDIAFILE,"MEANMSFX",YSUBTITLE(:),  &
      "Total updraft mass flux"//YSUBTITLE(:)," kg/m2/s",XLES_RESOLVED_MASSFX   ,HLES_AVG)
 !
 IF (LLES_PDF) THEN
-  CALL LES_DIACHRO_SV_MASKS("PDF_TH ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_SV_MASKS(TPDIAFILE,"PDF_TH ",YSUBTITLE(:), &
   "Pdf potential temperature Profiles"//YSUBTITLE(:)," ",XLES_PDF_TH,HLES_AVG)
-  CALL LES_DIACHRO_SV_MASKS("PDF_W ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_SV_MASKS(TPDIAFILE,"PDF_W ",YSUBTITLE(:), &
   "Pdf vertical velocity Profiles"//YSUBTITLE(:)," ",XLES_PDF_W,HLES_AVG)
-  CALL LES_DIACHRO_SV_MASKS("PDF_THV ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_SV_MASKS(TPDIAFILE,"PDF_THV ",YSUBTITLE(:), &
   "Pdf virtual pot. temp. Profiles"//YSUBTITLE(:)," ",XLES_PDF_THV,HLES_AVG)
     
   IF (LUSERV) THEN
-   CALL LES_DIACHRO_SV_MASKS("PDF_RV ",YSUBTITLE(:), &
+   CALL LES_DIACHRO_SV_MASKS(TPDIAFILE,"PDF_RV ",YSUBTITLE(:), &
      "Pdf Rv Profiles"//YSUBTITLE(:)," ",XLES_PDF_RV,HLES_AVG)
   END IF
 
   IF (LUSERC) THEN
-   CALL LES_DIACHRO_SV_MASKS("PDF_RC ",YSUBTITLE(:), &
+   CALL LES_DIACHRO_SV_MASKS(TPDIAFILE,"PDF_RC ",YSUBTITLE(:), &
    "Pdf Rc Profiles"//YSUBTITLE(:)," ",XLES_PDF_RC,HLES_AVG)
 
-   CALL LES_DIACHRO_SV_MASKS("PDF_RT ",YSUBTITLE(:), &
+   CALL LES_DIACHRO_SV_MASKS(TPDIAFILE,"PDF_RT ",YSUBTITLE(:), &
    "Pdf Rt Profiles"//YSUBTITLE(:)," ",XLES_PDF_RT,HLES_AVG)
 
-   CALL LES_DIACHRO_SV_MASKS("PDF_THL ",YSUBTITLE(:), &
+   CALL LES_DIACHRO_SV_MASKS(TPDIAFILE,"PDF_THL ",YSUBTITLE(:), &
    "Pdf Thl Profiles"//YSUBTITLE(:)," ",XLES_PDF_THL,HLES_AVG)
   END IF
   IF (LUSERR) &
-  CALL LES_DIACHRO_SV_MASKS("PDF_RR ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_SV_MASKS(TPDIAFILE,"PDF_RR ",YSUBTITLE(:), &
   "Pdf Rr Profiles"//YSUBTITLE(:)," ",XLES_PDF_RR,HLES_AVG)
 
   IF (LUSERI) &
-  CALL LES_DIACHRO_SV_MASKS("PDF_RI ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_SV_MASKS(TPDIAFILE,"PDF_RI ",YSUBTITLE(:), &
   "Pdf Ri Profiles"//YSUBTITLE(:)," ",XLES_PDF_RI,HLES_AVG)
 
   IF (LUSERS) &
-  CALL LES_DIACHRO_SV_MASKS("PDF_RS ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_SV_MASKS(TPDIAFILE,"PDF_RS ",YSUBTITLE(:), &
   "Pdf Rs Profiles"//YSUBTITLE(:)," ",XLES_PDF_RS,HLES_AVG)
 
   IF (LUSERG) &
-  CALL LES_DIACHRO_SV_MASKS("PDF_RG ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_SV_MASKS(TPDIAFILE,"PDF_RG ",YSUBTITLE(:), &
   "Pdf Rg Profiles"//YSUBTITLE(:)," ",XLES_PDF_RG,HLES_AVG)
 
 END IF
@@ -456,316 +459,316 @@ END IF
 !            -------------------
 !
 IF (LLES_RESOLVED) THEN
-  CALL LES_DIACHRO_MASKS("RES_U2  ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_U2  ",YSUBTITLE(:), &
      "Resolved <u2> variance "//YSUBTITLE(:),"m2/s2",XLES_RESOLVED_U2,HLES_AVG)
 
-  CALL LES_DIACHRO_MASKS("RES_V2  ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_V2  ",YSUBTITLE(:), &
      "Resolved <v2> variance"//YSUBTITLE(:),"m2/s2",XLES_RESOLVED_V2,HLES_AVG)
 
-  CALL LES_DIACHRO_MASKS("RES_W2  ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_W2  ",YSUBTITLE(:), &
      "Resolved <w2> variance"//YSUBTITLE(:),"m2/s2",XLES_RESOLVED_W2,HLES_AVG)
 
-  CALL LES_DIACHRO_MASKS("RES_UV  ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_UV  ",YSUBTITLE(:), &
      "Resolved <uv> Flux"//YSUBTITLE(:),"m2/s2",XLES_RESOLVED_UV,HLES_AVG)
 
-  CALL LES_DIACHRO_MASKS("RES_WU  ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_WU  ",YSUBTITLE(:), &
    "Resolved <wu> Flux"//YSUBTITLE(:),"m2/s2",XLES_RESOLVED_WU,HLES_AVG)
 
-  CALL LES_DIACHRO_MASKS("RES_WV  ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_WV  ",YSUBTITLE(:), &
      "Resolved <wv> Flux"//YSUBTITLE(:),"m2/s2",XLES_RESOLVED_WV,HLES_AVG)
 
-  CALL LES_DIACHRO_MASKS("RES_KE  ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_KE  ",YSUBTITLE(:), &
      "Resolved TKE Profile"//YSUBTITLE(:),"m2/s2",XLES_RESOLVED_Ke,HLES_AVG)
 
-  CALL LES_DIACHRO_MASKS("RES_P2  ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_P2  ",YSUBTITLE(:), &
      "Resolved pressure variance"//YSUBTITLE(:),"Pa2",XLES_RESOLVED_P2,HLES_AVG)
 
-  CALL LES_DIACHRO_MASKS("RES_UPZ ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_UPZ ",YSUBTITLE(:), &
      "Resolved <up> horizontal Flux"//YSUBTITLE(:),"Pa/s",XLES_RESOLVED_UP,HLES_AVG)
 
-  CALL LES_DIACHRO_MASKS("RES_VPZ ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_VPZ ",YSUBTITLE(:), &
      "Resolved <vp> horizontal Flux"//YSUBTITLE(:),"Pa/s",XLES_RESOLVED_VP,HLES_AVG)
 
-  CALL LES_DIACHRO_MASKS("RES_WPZ ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_WPZ ",YSUBTITLE(:), &
      "Resolved <wp> vertical Flux"//YSUBTITLE(:),"Pa/s",XLES_RESOLVED_WP,HLES_AVG)
 
   IF (LUSERV) &
-  CALL LES_DIACHRO_MASKS("RES_THTV ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_THTV ",YSUBTITLE(:), &
      "Resolved potential temperature - virtual potential temperature covariance"//YSUBTITLE(:), &
      "K2",XLES_RESOLVED_ThThv,HLES_AVG)
 
   IF (LUSERC) &
-  CALL LES_DIACHRO_MASKS("RES_TLTV ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_TLTV ",YSUBTITLE(:), &
      "Resolved liquid potential temperature - virtual potential temperature covariance"//YSUBTITLE(:), &
      "K2",XLES_RESOLVED_ThlThv,HLES_AVG)
 
-  CALL LES_DIACHRO_MASKS("RES_TH2 ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_TH2 ",YSUBTITLE(:), &
      "Resolved potential temperature variance"//YSUBTITLE(:),"K2",XLES_RESOLVED_Th2,HLES_AVG)
 
   IF (LUSERC) &
-  CALL LES_DIACHRO_MASKS("RES_THL2",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_THL2",YSUBTITLE(:), &
      "Resolved liquid potential temperature variance"//YSUBTITLE(:),"K2",XLES_RESOLVED_Thl2,HLES_AVG)
 
-  CALL LES_DIACHRO_MASKS("RES_UTH ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_UTH ",YSUBTITLE(:), &
      "Resolved <uth> horizontal Flux"//YSUBTITLE(:),"mK/s",XLES_RESOLVED_UTh,HLES_AVG)
 
-  CALL LES_DIACHRO_MASKS("RES_VTH ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_VTH ",YSUBTITLE(:), &
      "Resolved <vth> horizontal Flux"//YSUBTITLE(:),"mK/s",XLES_RESOLVED_VTh,HLES_AVG)
 
-  CALL LES_DIACHRO_MASKS("RES_WTH ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_WTH ",YSUBTITLE(:), &
      "Resolved <wth> vertical Flux"//YSUBTITLE(:),"mK/s",XLES_RESOLVED_WTh,HLES_AVG)
 
   IF (LUSERC) THEN
-    CALL LES_DIACHRO_MASKS("RES_UTHL",YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_UTHL",YSUBTITLE(:), &
        "Resolved <uthl> horizontal Flux"//YSUBTITLE(:),"mK/s",XLES_RESOLVED_UThl,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("RES_VTHL",YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_VTHL",YSUBTITLE(:), &
        "Resolved <vthl> horizontal Flux"//YSUBTITLE(:),"mK/s",XLES_RESOLVED_VThl,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("RES_WTHL",YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_WTHL",YSUBTITLE(:), &
        "Resolved <wthl> vertical Flux "//YSUBTITLE(:),"mK/s",XLES_RESOLVED_WThl,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("RES_RT2 ",YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_RT2 ",YSUBTITLE(:), &
      "Resolved total water variance"//YSUBTITLE(:),"kg2/kg2",XLES_RESOLVED_Rt2,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("RES_WRT ",YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_WRT ",YSUBTITLE(:), &
        "Resolved <wrt> vertical Flux "//YSUBTITLE(:),"mkg/kg/s",XLES_RESOLVED_WRt,HLES_AVG)
   END IF
 
   IF (LUSERV) THEN
 
-    CALL LES_DIACHRO_MASKS("RES_UTHV",YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_UTHV",YSUBTITLE(:), &
        "Resolved <uthv> horizontal Flux"//YSUBTITLE(:),"mK/s",XLES_RESOLVED_UThv,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("RES_VTHV",YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_VTHV",YSUBTITLE(:), &
        "Resolved <vthl> horizontal Flux"//YSUBTITLE(:),"mK/s",XLES_RESOLVED_VThv,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("RES_WTHV",YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_WTHV",YSUBTITLE(:), &
        "Resolved <wthv> vertical Flux "//YSUBTITLE(:),"mK/s",XLES_RESOLVED_WThv,HLES_AVG)
   END IF
 !
   IF (LUSERV) THEN
-    CALL LES_DIACHRO_MASKS("RES_RV2 ",YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_RV2 ",YSUBTITLE(:), &
        "Resolved water vapor variance"//YSUBTITLE(:),"kg2/kg2",XLES_RESOLVED_Rv2,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("RES_THRV",YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_THRV",YSUBTITLE(:), &
        "Resolved <thrv> covariance"//YSUBTITLE(:),"Kkg/kg",XLES_RESOLVED_ThRv,HLES_AVG)
 
     IF (LUSERC) &
-    CALL LES_DIACHRO_MASKS("RES_TLRV",YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_TLRV",YSUBTITLE(:), &
        "Resolved <thlrv> covariance"//YSUBTITLE(:),"Kkg/kg",XLES_RESOLVED_ThlRv,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("RES_TVRV",YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_TVRV",YSUBTITLE(:), &
        "Resolved <thvrv> covariance"//YSUBTITLE(:),"Kkg/kg",XLES_RESOLVED_ThvRv,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("RES_URV ", YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_URV ", YSUBTITLE(:), &
        "Resolved <urv> horizontal flux"//YSUBTITLE(:),"mkg/kg/s",XLES_RESOLVED_URv,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("RES_VRV ", YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_VRV ", YSUBTITLE(:), &
        "Resolved <vrv> horizontal flux"//YSUBTITLE(:),"mkg/kg/s",XLES_RESOLVED_VRv,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("RES_WRV ", YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_WRV ", YSUBTITLE(:), &
        "Resolved <wrv> vertical flux"//YSUBTITLE(:),"mkg/kg/s",XLES_RESOLVED_WRv,HLES_AVG)
   END IF
 
   IF (LUSERC) THEN
-    CALL LES_DIACHRO_MASKS("RES_RC2 ", YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_RC2 ", YSUBTITLE(:), &
        "Resolved cloud water variance"//YSUBTITLE(:),"kg2/kg2",XLES_RESOLVED_Rc2,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("RES_THRC", YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_THRC", YSUBTITLE(:), &
        "Resolved <thrc> covariance"//YSUBTITLE(:),"Kkg/kg",XLES_RESOLVED_ThRc,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("RES_TLRC", YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_TLRC", YSUBTITLE(:), &
        "Resolved <thlrc> covariance"//YSUBTITLE(:),"Kkg/kg",XLES_RESOLVED_ThlRc,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("RES_TVRC", YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_TVRC", YSUBTITLE(:), &
        "Resolved <thvrc> covariance"//YSUBTITLE(:),"Kkg/kg",XLES_RESOLVED_ThvRc,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("RES_URC ", YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_URC ", YSUBTITLE(:), &
        "Resolved <urc> horizontal flux"//YSUBTITLE(:),"mkg/kg/s",XLES_RESOLVED_URc,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("RES_VRC ", YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_VRC ", YSUBTITLE(:), &
        "Resolved <vrc> horizontal flux"//YSUBTITLE(:),"mkg/kg/s",XLES_RESOLVED_VRc,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("RES_WRC ", YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_WRC ", YSUBTITLE(:), &
        "Resolved <wrc> vertical flux"//YSUBTITLE(:),"mkg/kg/s",XLES_RESOLVED_WRc,HLES_AVG)
   END IF
 
   IF (LUSERI) THEN
-    CALL LES_DIACHRO_MASKS("RES_RI2 ", YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_RI2 ", YSUBTITLE(:), &
        "Resolved cloud ice variance"//YSUBTITLE(:),"kg2/kg2",XLES_RESOLVED_Ri2,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("RES_THRI", YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_THRI", YSUBTITLE(:), &
        "Resolved <thri> covariance"//YSUBTITLE(:),"Kkg/kg",XLES_RESOLVED_ThRi,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("RES_TLRI", YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_TLRI", YSUBTITLE(:), &
        "Resolved <thlri> covariance"//YSUBTITLE(:),"Kkg/kg",XLES_RESOLVED_ThlRi,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("RES_TVRI", YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_TVRI", YSUBTITLE(:), &
        "Resolved <thvri> covariance"//YSUBTITLE(:),"Kkg/kg",XLES_RESOLVED_ThvRi,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("RES_URI ", YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_URI ", YSUBTITLE(:), &
        "Resolved <uri> horizontal flux"//YSUBTITLE(:),"mkg/kg/s",XLES_RESOLVED_URi,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("RES_VRI ", YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_VRI ", YSUBTITLE(:), &
        "Resolved <vri> horizontal flux"//YSUBTITLE(:),"mkg/kg/s",XLES_RESOLVED_VRi,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("RES_WRI ", YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_WRI ", YSUBTITLE(:), &
        "Resolved <wri> vertical flux"//YSUBTITLE(:),"mkg/kg/s",XLES_RESOLVED_WRi,HLES_AVG)
   END IF
 
   IF (LUSERR) THEN
-    CALL LES_DIACHRO_MASKS("RES_WRR ", YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_WRR ", YSUBTITLE(:), &
        "Resolved <wrr> vertical flux"//YSUBTITLE(:),"mkg/kg/s",XLES_RESOLVED_WRr,HLES_AVG)
     
-    CALL LES_DIACHRO_MASKS("INPRR3D ", YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"INPRR3D ", YSUBTITLE(:), &
        "Precipitation flux"//YSUBTITLE(:),"m/s",XLES_INPRR3D,HLES_AVG)   
         
-    CALL LES_DIACHRO_MASKS("MAXINPR3D ", YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"MAXINPR3D ", YSUBTITLE(:), &
        "Max Precip flux"//YSUBTITLE(:),"m/s",XLES_MAX_INPRR3D,HLES_AVG)   
         
-    CALL LES_DIACHRO_MASKS("EVAP3D ", YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"EVAP3D ", YSUBTITLE(:), &
        "Evaporation profile"//YSUBTITLE(:),"kg/kg/s",XLES_EVAP3D,HLES_AVG)
   ENDIF
   IF (NSV>0) THEN
-    CALL LES_DIACHRO_SV_MASKS("RES_SV2 ", YSUBTITLE(:), &
+    CALL LES_DIACHRO_SV_MASKS(TPDIAFILE,"RES_SV2 ", YSUBTITLE(:), &
        "Resolved scalar variables variances"//YSUBTITLE(:),"kg2/kg2",XLES_RESOLVED_Sv2,HLES_AVG)
 
-    CALL LES_DIACHRO_SV_MASKS("RES_THSV", YSUBTITLE(:), &
+    CALL LES_DIACHRO_SV_MASKS(TPDIAFILE,"RES_THSV", YSUBTITLE(:), &
        "Resolved <ThSv> variance"//YSUBTITLE(:),"Kkg/kg",XLES_RESOLVED_ThSv,HLES_AVG)
 
     IF (LUSERC) &
-    CALL LES_DIACHRO_SV_MASKS("RES_TLSV", YSUBTITLE(:), &
+    CALL LES_DIACHRO_SV_MASKS(TPDIAFILE,"RES_TLSV", YSUBTITLE(:), &
        "Resolved <ThlSv> variance"//YSUBTITLE(:),"Kkg/kg",XLES_RESOLVED_ThlSv,HLES_AVG)
 
     IF (LUSERV) &
-    CALL LES_DIACHRO_SV_MASKS("RES_TVSV", YSUBTITLE(:), &
+    CALL LES_DIACHRO_SV_MASKS(TPDIAFILE,"RES_TVSV", YSUBTITLE(:), &
        "Resolved <ThvSv> variance"//YSUBTITLE(:),"Kkg/kg",XLES_RESOLVED_ThvSv,HLES_AVG)
 
-    CALL LES_DIACHRO_SV_MASKS("RES_USV ", YSUBTITLE(:), &
+    CALL LES_DIACHRO_SV_MASKS(TPDIAFILE,"RES_USV ", YSUBTITLE(:), &
        "Resolved <uSv> horizontal flux"//YSUBTITLE(:),"mkg/kg/s",XLES_RESOLVED_USv,HLES_AVG)
 
-    CALL LES_DIACHRO_SV_MASKS("RES_VSV ", YSUBTITLE(:), &
+    CALL LES_DIACHRO_SV_MASKS(TPDIAFILE,"RES_VSV ", YSUBTITLE(:), &
        "Resolved <vSv> horizontal flux"//YSUBTITLE(:),"mkg/kg/s",XLES_RESOLVED_VSv,HLES_AVG)
 
-    CALL LES_DIACHRO_SV_MASKS("RES_WSV ", YSUBTITLE(:), &
+    CALL LES_DIACHRO_SV_MASKS(TPDIAFILE,"RES_WSV ", YSUBTITLE(:), &
        "Resolved <wSv> vertical flux"//YSUBTITLE(:),"mkg/kg/s",XLES_RESOLVED_WSv,HLES_AVG)
   END IF
 
-  CALL LES_DIACHRO_MASKS("RES_U3  ",YSUBTITLE(:),  &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_U3  ",YSUBTITLE(:),  &
        "Resolved <w3>"//YSUBTITLE(:),"m3/s3",XLES_RESOLVED_U3,HLES_AVG)
 
-  CALL LES_DIACHRO_MASKS("RES_V3  ",YSUBTITLE(:),  &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_V3  ",YSUBTITLE(:),  &
        "Resolved <w3>"//YSUBTITLE(:),"m3/s3",XLES_RESOLVED_V3,HLES_AVG)
     
-  CALL LES_DIACHRO_MASKS("RES_W3  ",YSUBTITLE(:),  &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_W3  ",YSUBTITLE(:),  &
        "Resolved <w3>"//YSUBTITLE(:),"m3/s3",XLES_RESOLVED_W3,HLES_AVG)
 
-  CALL LES_DIACHRO_MASKS("RES_U4  ",YSUBTITLE(:),  &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_U4  ",YSUBTITLE(:),  &
        "Resolved <w3>"//YSUBTITLE(:),"m4/s4",XLES_RESOLVED_U4,HLES_AVG)
 
-  CALL LES_DIACHRO_MASKS("RES_V4  ",YSUBTITLE(:),  &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_V4  ",YSUBTITLE(:),  &
        "Resolved <w3>"//YSUBTITLE(:),"m4/s4",XLES_RESOLVED_V4,HLES_AVG)
     
-  CALL LES_DIACHRO_MASKS("RES_W4  ",YSUBTITLE(:),  &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_W4  ",YSUBTITLE(:),  &
        "Resolved <w3>"//YSUBTITLE(:),"m4/s4",XLES_RESOLVED_W4,HLES_AVG)
 
 
-  CALL LES_DIACHRO_MASKS("RES_WTL2",YSUBTITLE(:),  &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_WTL2",YSUBTITLE(:),  &
        "Resolved <wThl2>"//YSUBTITLE(:),"mK2/s",XLES_RESOLVED_WThl2,HLES_AVG)
 
-  CALL LES_DIACHRO_MASKS("RES_W2TL",YSUBTITLE(:),  &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_W2TL",YSUBTITLE(:),  &
        "Resolved <w2Thl>"//YSUBTITLE(:),"m2K/s2",XLES_RESOLVED_W2Thl,HLES_AVG)
 
   IF (LUSERV) THEN
-    CALL LES_DIACHRO_MASKS("RES_WRV2",YSUBTITLE(:),  &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_WRV2",YSUBTITLE(:),  &
          "Resolved <wRv2>"//YSUBTITLE(:),"mkg2/kg2/s",XLES_RESOLVED_WRv2,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("RES_W2RV",YSUBTITLE(:),  &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_W2RV",YSUBTITLE(:),  &
          "Resolved <w2Rv>"//YSUBTITLE(:),"m2kg/kg/s2",XLES_RESOLVED_W2Rv,HLES_AVG)
      
-    CALL LES_DIACHRO_MASKS("RES_WRT2",YSUBTITLE(:),  &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_WRT2",YSUBTITLE(:),  &
          "Resolved <wRt2>"//YSUBTITLE(:),"mkg2/kg2/s",XLES_RESOLVED_WRt2,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("RES_W2RT",YSUBTITLE(:),  &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_W2RT",YSUBTITLE(:),  &
          "Resolved <w2Rt>"//YSUBTITLE(:),"m2kg/kg/s2",XLES_RESOLVED_W2Rt,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("RE_WTLRV",YSUBTITLE(:),  &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RE_WTLRV",YSUBTITLE(:),  &
          "Resolved <wThlRv>"//YSUBTITLE(:),"mKkg/kg/s",XLES_RESOLVED_WThlRv,HLES_AVG)
    
-    CALL LES_DIACHRO_MASKS("RE_WTLRT",YSUBTITLE(:),  &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RE_WTLRT",YSUBTITLE(:),  &
          "Resolved <wThlRt>"//YSUBTITLE(:),"mKkg/kg/s",XLES_RESOLVED_WThlRt,HLES_AVG)  
   END IF
 
   IF (LUSERC) THEN
-    CALL LES_DIACHRO_MASKS("RES_WRC2",YSUBTITLE(:),  &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_WRC2",YSUBTITLE(:),  &
          "Resolved <wRc2>"//YSUBTITLE(:),"mkg2/kg2/s",XLES_RESOLVED_WRc2,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("RES_W2RC",YSUBTITLE(:),  &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_W2RC",YSUBTITLE(:),  &
          "Resolved <w2Rc>"//YSUBTITLE(:),"m2kg/kg/s2",XLES_RESOLVED_W2Rc,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("RE_WTLRC",YSUBTITLE(:),  &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RE_WTLRC",YSUBTITLE(:),  &
          "Resolved <wThlRc>"//YSUBTITLE(:),"mKkg/kg/s",XLES_RESOLVED_WThlRc,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("RE_WRVRC",YSUBTITLE(:),  &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RE_WRVRC",YSUBTITLE(:),  &
          "Resolved <wRvRc>"//YSUBTITLE(:),"mkg2/kg2/s",XLES_RESOLVED_WRvRc,HLES_AVG)
   END IF
 
   IF (LUSERI) THEN
-    CALL LES_DIACHRO_MASKS("RES_WRI2",YSUBTITLE(:),  &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_WRI2",YSUBTITLE(:),  &
          "Resolved <wRi2>"//YSUBTITLE(:),"mkg2/kg2/s",XLES_RESOLVED_WRi2,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("RES_W2RI",YSUBTITLE(:),  &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_W2RI",YSUBTITLE(:),  &
          "Resolved <w2Ri>"//YSUBTITLE(:),"m2kg/kg/s2",XLES_RESOLVED_W2Ri,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("RE_WTLRI",YSUBTITLE(:),  &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RE_WTLRI",YSUBTITLE(:),  &
          "Resolved <wThlRi>"//YSUBTITLE(:),"mKkg/kg/s",XLES_RESOLVED_WThlRi,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("RE_WRVRI",YSUBTITLE(:),  &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"RE_WRVRI",YSUBTITLE(:),  &
          "Resolved <wRvRi>"//YSUBTITLE(:),"mkg2/kg2/s",XLES_RESOLVED_WRvRi,HLES_AVG)
   END IF
 
   IF (NSV>0) THEN
-    CALL LES_DIACHRO_SV_MASKS("RES_WSV2",YSUBTITLE(:),  &
+    CALL LES_DIACHRO_SV_MASKS(TPDIAFILE,"RES_WSV2",YSUBTITLE(:),  &
          "Resolved <wSv2>"//YSUBTITLE(:),"mkg2/kg2/s",XLES_RESOLVED_WSv2,HLES_AVG)
 
-    CALL LES_DIACHRO_SV_MASKS("RES_W2SV",YSUBTITLE(:),  &
+    CALL LES_DIACHRO_SV_MASKS(TPDIAFILE,"RES_W2SV",YSUBTITLE(:),  &
          "Resolved <w2Sv>"//YSUBTITLE(:),"m2kg/kg/s2",XLES_RESOLVED_W2Sv,HLES_AVG)
 
-    CALL LES_DIACHRO_SV_MASKS("RE_WTLSV",YSUBTITLE(:),  &
+    CALL LES_DIACHRO_SV_MASKS(TPDIAFILE,"RE_WTLSV",YSUBTITLE(:),  &
          "Resolved <wThlSv>"//YSUBTITLE(:),"mKkg/kg/s",XLES_RESOLVED_WThlSv,HLES_AVG)
 
-    CALL LES_DIACHRO_SV_MASKS("RE_WRVSV",YSUBTITLE(:),  &
+    CALL LES_DIACHRO_SV_MASKS(TPDIAFILE,"RE_WRVSV",YSUBTITLE(:),  &
          "Resolved <wRvSv>"//YSUBTITLE(:),"mkg2/kg2/s",XLES_RESOLVED_WRvSv,HLES_AVG)
   END IF
 
-  CALL LES_DIACHRO_MASKS("RES_TLPZ",YSUBTITLE(:),  &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_TLPZ",YSUBTITLE(:),  &
        "Resolved <Thldp/dz>"//YSUBTITLE(:),"KPa/m",XLES_RESOLVED_ThlPz,HLES_AVG)
 
   IF (LUSERV) &
-  CALL LES_DIACHRO_MASKS("RES_RVPZ",YSUBTITLE(:),  &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_RVPZ",YSUBTITLE(:),  &
        "Resolved <Rvdp/dz>"//YSUBTITLE(:),"kg2/kg2Pa/m",XLES_RESOLVED_RvPz,HLES_AVG)
 
   IF (LUSERC) &
-  CALL LES_DIACHRO_MASKS("RES_RCPZ",YSUBTITLE(:),  &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_RCPZ",YSUBTITLE(:),  &
        "Resolved <Rcdp/dz>"//YSUBTITLE(:),"kg2/kg2Pa/m",XLES_RESOLVED_RcPz,HLES_AVG)
 
   IF (LUSERI) &
-  CALL LES_DIACHRO_MASKS("RES_RIPZ",YSUBTITLE(:),  &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_RIPZ",YSUBTITLE(:),  &
        "Resolved <Ridp/dz>"//YSUBTITLE(:),"kg2/kg2Pa/m",XLES_RESOLVED_RiPz,HLES_AVG)
 
   IF (NSV>0) THEN
-    CALL LES_DIACHRO_SV_MASKS("RES_SVPZ",YSUBTITLE(:),  &
+    CALL LES_DIACHRO_SV_MASKS(TPDIAFILE,"RES_SVPZ",YSUBTITLE(:),  &
          "Resolved <Svdp/dz>"//YSUBTITLE(:),"kg2/kg2Pa/m",XLES_RESOLVED_SvPz,HLES_AVG)
   END IF
 
-  CALL LES_DIACHRO_MASKS("RES_UKE ", YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_UKE ", YSUBTITLE(:), &
        "Resolved flux of resolved kinetic energy"//YSUBTITLE(:),"m3/s3",XLES_RESOLVED_UKe,HLES_AVG)
 
-  CALL LES_DIACHRO_MASKS("RES_VKE ", YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_VKE ", YSUBTITLE(:), &
        "Resolved flux of resolved kinetic energy"//YSUBTITLE(:),"m3/s3",XLES_RESOLVED_VKe,HLES_AVG)
 
-  CALL LES_DIACHRO_MASKS("RES_WKE ", YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"RES_WKE ", YSUBTITLE(:), &
        "Resolved flux of resolved kinetic energy"//YSUBTITLE(:),"m3/s3",XLES_RESOLVED_WKe,HLES_AVG)
 
 END IF
@@ -776,173 +779,173 @@ END IF
 !
 IF (LLES_SUBGRID) THEN
 
-  CALL LES_DIACHRO_MASKS("SBG_TKE ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"SBG_TKE ",YSUBTITLE(:), &
        "Subgrid TKE"//YSUBTITLE(:),"m2/s2",XLES_SUBGRID_Tke,HLES_AVG)
 
-  CALL LES_DIACHRO_MASKS("SBG_U2  ", YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"SBG_U2  ", YSUBTITLE(:), &
        "Subgrid <u2> variance"//YSUBTITLE(:),"m2/s2",XLES_SUBGRID_U2,HLES_AVG)
 
-  CALL LES_DIACHRO_MASKS("SBG_V2  ", YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"SBG_V2  ", YSUBTITLE(:), &
        "Subgrid <v2> variance"//YSUBTITLE(:),"m2/s2",XLES_SUBGRID_V2,HLES_AVG)
 
-  CALL LES_DIACHRO_MASKS("SBG_W2  ", YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"SBG_W2  ", YSUBTITLE(:), &
        "Subgrid <w2> variance"//YSUBTITLE(:),"m2/s2",XLES_SUBGRID_W2,HLES_AVG)
 
-  CALL LES_DIACHRO_MASKS("SBG_UV  ", YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"SBG_UV  ", YSUBTITLE(:), &
        "Subgrid <uv> flux"//YSUBTITLE(:),"m2/s2",XLES_SUBGRID_UV,HLES_AVG)
 
-  CALL LES_DIACHRO_MASKS("SBG_WU  ", YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"SBG_WU  ", YSUBTITLE(:), &
        "Subgrid <wu> flux"//YSUBTITLE(:),"m2/s2",XLES_SUBGRID_WU,HLES_AVG)
 
-  CALL LES_DIACHRO_MASKS("SBG_WV  ", YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"SBG_WV  ", YSUBTITLE(:), &
        "Subgrid <wv> flux"//YSUBTITLE(:),"m2/s2",XLES_SUBGRID_WV,HLES_AVG)
 
-  CALL LES_DIACHRO_MASKS("SBG_THL2", YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"SBG_THL2", YSUBTITLE(:), &
        "Subgrid liquid potential temperature variance"//YSUBTITLE(:),"K2",XLES_SUBGRID_Thl2,HLES_AVG)
 
-  CALL LES_DIACHRO_MASKS("SBG_UTHL", YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"SBG_UTHL", YSUBTITLE(:), &
        "Subgrid hor. flux of liquid potential temperature"//YSUBTITLE(:),"mK/s",XLES_SUBGRID_UThl,HLES_AVG)
 
-  CALL LES_DIACHRO_MASKS("SBG_VTHL", YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"SBG_VTHL", YSUBTITLE(:), &
        "Subgrid hor. flux of liquid potential temperature"//YSUBTITLE(:),"mK/s",XLES_SUBGRID_VThl,HLES_AVG)
 
-  CALL LES_DIACHRO_MASKS("SBG_WTHL", YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"SBG_WTHL", YSUBTITLE(:), &
        "Subgrid vert. flux of liquid potential temperature"//YSUBTITLE(:),"mK/s",XLES_SUBGRID_WThl,HLES_AVG)
 
-  CALL LES_DIACHRO_MASKS("SBG_WP  ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"SBG_WP  ",YSUBTITLE(:), &
      "Subgrid <wp> vertical Flux"//YSUBTITLE(:),"mPa/s",XLES_SUBGRID_WP,HLES_AVG)
 !!
 !!
-  CALL LES_DIACHRO_MASKS("THLUP_MF",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"THLUP_MF",YSUBTITLE(:), &
      "Subgrid <thl> of updraft"//YSUBTITLE(:),"K",XLES_SUBGRID_THLUP_MF,HLES_AVG)
 !     
-  CALL LES_DIACHRO_MASKS("RTUP_MF ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"RTUP_MF ",YSUBTITLE(:), &
      "Subgrid <rt> of updraft"//YSUBTITLE(:),"kg/kg",XLES_SUBGRID_RTUP_MF,HLES_AVG)
 !     
-  CALL LES_DIACHRO_MASKS("RVUP_MF ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"RVUP_MF ",YSUBTITLE(:), &
      "Subgrid <rv> of updraft"//YSUBTITLE(:),"kg/kg",XLES_SUBGRID_RVUP_MF,HLES_AVG)
 !     
-  CALL LES_DIACHRO_MASKS("RCUP_MF ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"RCUP_MF ",YSUBTITLE(:), &
      "Subgrid <rc> of updraft"//YSUBTITLE(:),"kg/kg",XLES_SUBGRID_RCUP_MF,HLES_AVG) 
 !     
-  CALL LES_DIACHRO_MASKS("RIUP_MF ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"RIUP_MF ",YSUBTITLE(:), &
      "Subgrid <ri> of updraft"//YSUBTITLE(:),"kg/kg",XLES_SUBGRID_RIUP_MF,HLES_AVG) 
 !     
-  CALL LES_DIACHRO_MASKS("WUP_MF  ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"WUP_MF  ",YSUBTITLE(:), &
      "Subgrid <w> of updraft"//YSUBTITLE(:),"m/s",XLES_SUBGRID_WUP_MF,HLES_AVG)  
 !     
-  CALL LES_DIACHRO_MASKS("MAFLX_MF",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"MAFLX_MF",YSUBTITLE(:), &
      "Subgrid <MF> of updraft"//YSUBTITLE(:),"kg/m2/s",XLES_SUBGRID_MASSFLUX,HLES_AVG) 
 !     
-  CALL LES_DIACHRO_MASKS("DETR_MF ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"DETR_MF ",YSUBTITLE(:), &
      "Subgrid <detr> of updraft"//YSUBTITLE(:),"kg/m3/s",XLES_SUBGRID_DETR,HLES_AVG) 
 !     
-  CALL LES_DIACHRO_MASKS("ENTR_MF ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"ENTR_MF ",YSUBTITLE(:), &
      "Subgrid <entr> of updraft"//YSUBTITLE(:),"kg/m3/s",XLES_SUBGRID_ENTR,HLES_AVG)  
 !     
-  CALL LES_DIACHRO_MASKS("FRCUP_MF",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"FRCUP_MF",YSUBTITLE(:), &
      "Subgrid <FracUp> of updraft"//YSUBTITLE(:),"-",XLES_SUBGRID_FRACUP,HLES_AVG)   
 !     
-  CALL LES_DIACHRO_MASKS("THVUP_MF",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"THVUP_MF",YSUBTITLE(:), &
      "Subgrid <thv> of updraft"//YSUBTITLE(:),"K",&
                                 XLES_SUBGRID_THVUP_MF,HLES_AVG) 
 !     
-  CALL LES_DIACHRO_MASKS("WTHL_MF ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"WTHL_MF ",YSUBTITLE(:), &
      "Subgrid <wthl> of mass flux convection scheme"//YSUBTITLE(:),"mk/s",&
                                 XLES_SUBGRID_WTHLMF,HLES_AVG)  
 !     
-  CALL LES_DIACHRO_MASKS("WRT_MF  ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"WRT_MF  ",YSUBTITLE(:), &
      "Subgrid <wrt> of mass flux convection scheme"//YSUBTITLE(:),"mkg/kg/s",&
                                 XLES_SUBGRID_WRTMF,HLES_AVG)   
 !     
-  CALL LES_DIACHRO_MASKS("WTHV_MF ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"WTHV_MF ",YSUBTITLE(:), &
      "Subgrid <wthv> of mass flux convection scheme"//YSUBTITLE(:),"mK/s",&
                                 XLES_SUBGRID_WTHVMF,HLES_AVG)  
 !     
-  CALL LES_DIACHRO_MASKS("WU_MF   ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"WU_MF   ",YSUBTITLE(:), &
      "Subgrid <wu> of mass flux convection scheme"//YSUBTITLE(:),"m2/s2",&
                                 XLES_SUBGRID_WUMF,HLES_AVG)   
 !     
-  CALL LES_DIACHRO_MASKS("WV_MF   ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"WV_MF   ",YSUBTITLE(:), &
      "Subgrid <wv> of mass flux convection scheme"//YSUBTITLE(:),"m2/s2",&
                                 XLES_SUBGRID_WVMF,HLES_AVG)   
 !!     
 
-  CALL LES_DIACHRO_MASKS("SBG_PHI3",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"SBG_PHI3",YSUBTITLE(:), &
      "Subgrid Phi3 function"//YSUBTITLE(:),"-",XLES_SUBGRID_PHI3,HLES_AVG)
 
-  CALL LES_DIACHRO_MASKS("SBG_LMIX",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"SBG_LMIX",YSUBTITLE(:), &
      "Subgrid Mixing Length"//YSUBTITLE(:),"-",XLES_SUBGRID_LMix,HLES_AVG)
 
-  CALL LES_DIACHRO_MASKS("SBG_LDIS",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"SBG_LDIS",YSUBTITLE(:), &
      "Subgrid Dissipation Length"//YSUBTITLE(:),"-",XLES_SUBGRID_LDiss,HLES_AVG)
 
-  CALL LES_DIACHRO_MASKS("SBG_KM  ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"SBG_KM  ",YSUBTITLE(:), &
      "Eddy diffusivity for momentum"//YSUBTITLE(:),"m2/s",XLES_SUBGRID_Km,HLES_AVG)
 
-  CALL LES_DIACHRO_MASKS("SBG_KH  ",YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"SBG_KH  ",YSUBTITLE(:), &
      "Eddy diffusivity for heat"//YSUBTITLE(:),"m2/s",XLES_SUBGRID_Kh,HLES_AVG)
 !
   IF (LUSERV) THEN
-     CALL LES_DIACHRO_MASKS("SBG_WTHV", YSUBTITLE(:), &
+     CALL LES_DIACHRO_MASKS(TPDIAFILE,"SBG_WTHV", YSUBTITLE(:), &
        "Subgrid vert. flux of liquid potential temperature"//YSUBTITLE(:),"mK/s",XLES_SUBGRID_WThv,HLES_AVG)
-    CALL LES_DIACHRO_MASKS("SBG_RT2 ", YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"SBG_RT2 ", YSUBTITLE(:), &
        "Subgrid total water variance"//YSUBTITLE(:),"kg2/kg2",XLES_SUBGRID_Rt2,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("SBG_TLRT", YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"SBG_TLRT", YSUBTITLE(:), &
        "Subgrid <thlrt> covariance"//YSUBTITLE(:),"Kkg/kg",XLES_SUBGRID_ThlRt,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("SBG_URT ", YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"SBG_URT ", YSUBTITLE(:), &
        "Subgrid total water horizontal flux"//YSUBTITLE(:),"mkg/kg/s",XLES_SUBGRID_URt,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("SBG_VRT ", YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"SBG_VRT ", YSUBTITLE(:), &
        "Subgrid total water horizontal flux"//YSUBTITLE(:),"mkg/kg/s",XLES_SUBGRID_VRt,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("SBG_WRT ", YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"SBG_WRT ", YSUBTITLE(:), &
        "Subgrid total water vertical flux"//YSUBTITLE(:),"mkg/kg/s",XLES_SUBGRID_WRt,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("SBG_PSI3",YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"SBG_PSI3",YSUBTITLE(:), &
        "Subgrid Psi3 function"//YSUBTITLE(:),"-",XLES_SUBGRID_PSI3,HLES_AVG)  
   END IF
 
   IF (LUSERC) THEN
-    CALL LES_DIACHRO_MASKS("SBG_RC2 ", YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"SBG_RC2 ", YSUBTITLE(:), &
        "Subgrid cloud water variance"//YSUBTITLE(:),"kg2/kg2",XLES_SUBGRID_Rc2,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("SBG_URC ", YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"SBG_URC ", YSUBTITLE(:), &
        "Subgrid cloud water horizontal flux"//YSUBTITLE(:),"mkg/kg/s",XLES_SUBGRID_URc,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("SBG_VRC ", YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"SBG_VRC ", YSUBTITLE(:), &
        "Subgrid cloud water horizontal flux"//YSUBTITLE(:),"mkg/kg/s",XLES_SUBGRID_VRc,HLES_AVG)
 
-    CALL LES_DIACHRO_MASKS("SBG_WRC ", YSUBTITLE(:), &
+    CALL LES_DIACHRO_MASKS(TPDIAFILE,"SBG_WRC ", YSUBTITLE(:), &
        "Subgrid cloud water vertical flux"//YSUBTITLE(:),"mkg/kg/s",XLES_SUBGRID_WRc,HLES_AVG)
   END IF
 
   IF (NSV>0) THEN
-    CALL LES_DIACHRO_SV_MASKS("SBG_USV ", YSUBTITLE(:), &
+    CALL LES_DIACHRO_SV_MASKS(TPDIAFILE,"SBG_USV ", YSUBTITLE(:), &
        "Subgrid <uSv> horizontal flux"//YSUBTITLE(:),"mkg/kg/s",XLES_SUBGRID_USv,HLES_AVG)
 
-    CALL LES_DIACHRO_SV_MASKS("SBG_VSV ", YSUBTITLE(:), &
+    CALL LES_DIACHRO_SV_MASKS(TPDIAFILE,"SBG_VSV ", YSUBTITLE(:), &
        "Subgrid <vSv> horizontal flux"//YSUBTITLE(:),"mkg/kg/s",XLES_SUBGRID_VSv,HLES_AVG)
 
-    CALL LES_DIACHRO_SV_MASKS("SBG_WSV ", YSUBTITLE(:), &
+    CALL LES_DIACHRO_SV_MASKS(TPDIAFILE,"SBG_WSV ", YSUBTITLE(:), &
        "Subgrid <wSv> vertical flux"//YSUBTITLE(:),"mkg/kg/s",XLES_SUBGRID_WSv,HLES_AVG)
   END IF
 
-  CALL LES_DIACHRO_MASKS("SBG_UTKE", YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"SBG_UTKE", YSUBTITLE(:), &
      "Subgrid flux of subgrid kinetic energy"//YSUBTITLE(:),"m3/s3",XLES_SUBGRID_UTke,HLES_AVG)
 
-  CALL LES_DIACHRO_MASKS("SBG_VTKE", YSUBTITLE(:), &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"SBG_VTKE", YSUBTITLE(:), &
      "Subgrid flux of subgrid kinetic energy"//YSUBTITLE(:),"m3/s3",XLES_SUBGRID_VTke,HLES_AVG)
 
-  CALL LES_DIACHRO_MASKS("SBG_WTKE",YSUBTITLE(:),  &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"SBG_WTKE",YSUBTITLE(:),  &
      "Subgrid flux of subgrid kinetic energy"//YSUBTITLE(:),"m3/s3",XLES_SUBGRID_WTke,HLES_AVG)
 !
-  CALL LES_DIACHRO_MASKS("SBG_W2TL",YSUBTITLE(:),  &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"SBG_W2TL",YSUBTITLE(:),  &
      "Subgrid flux of subgrid kinetic energy"//YSUBTITLE(:),"m2K/s2",XLES_SUBGRID_W2Thl,HLES_AVG)
 !
-  CALL LES_DIACHRO_MASKS("SBG_WTL2",YSUBTITLE(:),  &
+  CALL LES_DIACHRO_MASKS(TPDIAFILE,"SBG_WTL2",YSUBTITLE(:),  &
      "Subgrid flux of subgrid kinetic energy"//YSUBTITLE(:),"mK2/s",XLES_SUBGRID_WThl2,HLES_AVG)
 !
 END IF
@@ -951,155 +954,155 @@ END IF
 !            ------------------
 !
 IF (LLES_UPDRAFT) THEN
-  CALL LES_DIACHRO("UP_FRAC ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"UP_FRAC ",  &
        "Updraft fraction","-",XLES_UPDRAFT,HLES_AVG)
 
-  CALL LES_DIACHRO("UP_W    ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"UP_W    ",  &
        "Updraft W mean value","m/s",XLES_UPDRAFT_W,HLES_AVG)
 
-  CALL LES_DIACHRO("UP_TH   ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"UP_TH   ",  &
        "Updraft potential temperature mean value","K",XLES_UPDRAFT_Th,HLES_AVG)
 
   IF (LUSERC) &
-  CALL LES_DIACHRO("UP_THL  ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"UP_THL  ",  &
        "Updraft liquid potential temperature mean value","K",XLES_UPDRAFT_Thl,HLES_AVG)
 
   IF (LUSERV) &
-  CALL LES_DIACHRO("UP_THV  ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"UP_THV  ",  &
        "Updraft virutal potential temperature mean value","K",XLES_UPDRAFT_Thv,HLES_AVG)
 
-  CALL LES_DIACHRO("UP_KE   ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"UP_KE   ",  &
        "Updraft resolved TKE mean value","m2/s2",XLES_UPDRAFT_Ke,HLES_AVG)
 
-  CALL LES_DIACHRO("UP_TKE  ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"UP_TKE  ",  &
        "Updraft subgrid TKE mean value","m2/s2",XLES_UPDRAFT_Tke,HLES_AVG)
 
   IF (LUSERV) &
-  CALL LES_DIACHRO("UP_RV   ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"UP_RV   ",  &
        "Updraft water vapor mean value","kg/kg",XLES_UPDRAFT_Rv,HLES_AVG)
 
   IF (LUSERC) &
-  CALL LES_DIACHRO("UP_RC   ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"UP_RC   ",  &
        "Updraft cloud water mean value","kg/kg",XLES_UPDRAFT_Rc,HLES_AVG)
 
   IF (LUSERR) &
-  CALL LES_DIACHRO("UP_RR   ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"UP_RR   ",  &
        "Updraft rain mean value","kg/kg",XLES_UPDRAFT_Rr,HLES_AVG)
 
   IF (LUSERI) &
-  CALL LES_DIACHRO("UP_RI   ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"UP_RI   ",  &
        "Updraft ice mean value","kg/kg",XLES_UPDRAFT_Ri,HLES_AVG)
 
   IF (LUSERS) &
-  CALL LES_DIACHRO("UP_RS   ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"UP_RS   ",  &
        "Updraft snow mean value","kg/kg",XLES_UPDRAFT_Rs,HLES_AVG)
 
   IF (LUSERG) &
-  CALL LES_DIACHRO("UP_RG   ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"UP_RG   ",  &
        "Updraft graupel mean value","kg/kg",XLES_UPDRAFT_Rg,HLES_AVG)
 
   IF (LUSERH) &
-  CALL LES_DIACHRO("UP_RH   ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"UP_RH   ",  &
        "Updraft hail mean value","kg/kg",XLES_UPDRAFT_Rh,HLES_AVG)
 
   IF (NSV>0) &
-  CALL LES_DIACHRO_SV("UP_SV   ",  &
+  CALL LES_DIACHRO_SV(TPDIAFILE,"UP_SV   ",  &
        "Updraft scalar variables mean values","kg/kg",XLES_UPDRAFT_Sv,HLES_AVG)
   !
-  CALL LES_DIACHRO("UP_TH2 ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"UP_TH2 ",  &
        "Updraft resolved Theta variance ","K2",XLES_UPDRAFT_Th2,HLES_AVG)
 
   IF (LUSERC) &
-  CALL LES_DIACHRO("UP_THL2",  &
+  CALL LES_DIACHRO(TPDIAFILE,"UP_THL2",  &
        "Updraft resolved Theta_l variance ","K2",XLES_UPDRAFT_Thl2,HLES_AVG)
 
   IF (LUSERV) &
-  CALL LES_DIACHRO("UP_THTV",  &
+  CALL LES_DIACHRO(TPDIAFILE,"UP_THTV",  &
        "Updraft resolved Theta Theta_v covariance ","K2",XLES_UPDRAFT_ThThv,HLES_AVG)
 
   IF (LUSERC) &
-  CALL LES_DIACHRO("UP_TLTV",  &
+  CALL LES_DIACHRO(TPDIAFILE,"UP_TLTV",  &
        "Updraft resolved Theta_l Theta_v covariance ","K2",XLES_UPDRAFT_ThlThv,HLES_AVG)
 
-  CALL LES_DIACHRO("UP_WTH  ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"UP_WTH  ",  &
        "Updraft resolved WTh flux","mK/s",XLES_UPDRAFT_WTh,HLES_AVG)
 
   IF (LUSERC) &
-  CALL LES_DIACHRO("UP_WTHL ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"UP_WTHL ",  &
        "Updraft resolved WThl flux","mK/s",XLES_UPDRAFT_WThl,HLES_AVG)
 
   IF (LUSERV) &
-  CALL LES_DIACHRO("UP_WTHV ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"UP_WTHV ",  &
        "Updraft resolved WThv flux","mK/s",XLES_UPDRAFT_WThv,HLES_AVG)
   !
   IF (LUSERV) THEN
-    CALL LES_DIACHRO("UP_RV2  ",  &
+    CALL LES_DIACHRO(TPDIAFILE,"UP_RV2  ",  &
        "Updraft resolved water vapor variance","kg2/kg2",XLES_UPDRAFT_Rv2,HLES_AVG)
 
-    CALL LES_DIACHRO("UP_THRV ",  &
+    CALL LES_DIACHRO(TPDIAFILE,"UP_THRV ",  &
        "Updraft resolved <thrv> covariance","Kkg/kg",XLES_UPDRAFT_ThRv,HLES_AVG)
 
     IF (LUSERC) &
-    CALL LES_DIACHRO("UP_THLRV",  &
+    CALL LES_DIACHRO(TPDIAFILE,"UP_THLRV",  &
      "Updraft resolved <thlrv> covariance","Kkg/kg",XLES_UPDRAFT_ThlRv,HLES_AVG)
 
-    CALL LES_DIACHRO("UP_THVRV",  &
+    CALL LES_DIACHRO(TPDIAFILE,"UP_THVRV",  &
        "Updraft resolved <thvrv> covariance","Kkg/kg",XLES_UPDRAFT_ThvRv,HLES_AVG)
 
-    CALL LES_DIACHRO("UP_WRV  ",  &
+    CALL LES_DIACHRO(TPDIAFILE,"UP_WRV  ",  &
        "Updraft resolved <wrv> vertical flux","mkg/kg/s",XLES_UPDRAFT_WRv,HLES_AVG)
   END IF
 
   IF (LUSERC) THEN
-    CALL LES_DIACHRO("UP_RC2  ",  &
+    CALL LES_DIACHRO(TPDIAFILE,"UP_RC2  ",  &
        "Updraft resolved cloud water variance","kg2/kg2",XLES_UPDRAFT_Rc2,HLES_AVG)
 
-    CALL LES_DIACHRO("UP_THRC ",  &
+    CALL LES_DIACHRO(TPDIAFILE,"UP_THRC ",  &
        "Updraft resolved <thrc> covariance","Kkg/kg",XLES_UPDRAFT_ThRc,HLES_AVG)
 
-    CALL LES_DIACHRO("UP_THLRC", &
+    CALL LES_DIACHRO(TPDIAFILE,"UP_THLRC", &
        "Updraft resolved <thlrc> covariance","Kkg/kg",XLES_UPDRAFT_ThlRc,HLES_AVG)
 
-    CALL LES_DIACHRO("UP_THVRC", &
+    CALL LES_DIACHRO(TPDIAFILE,"UP_THVRC", &
        "Updraft resolved <thvrc> covariance","Kkg/kg",XLES_UPDRAFT_ThvRc,HLES_AVG)
 
-    CALL LES_DIACHRO("UP_WRC  ",  &
+    CALL LES_DIACHRO(TPDIAFILE,"UP_WRC  ",  &
        "Updraft resolved <wrc> vertical flux","mkg/kg/s",XLES_UPDRAFT_WRc,HLES_AVG)
   END IF
 
   IF (LUSERI) THEN
-    CALL LES_DIACHRO("UP_RI2  ", &
+    CALL LES_DIACHRO(TPDIAFILE,"UP_RI2  ", &
        "Updraft resolved cloud ice variance","kg2/kg2",XLES_UPDRAFT_Ri2,HLES_AVG)
 
-    CALL LES_DIACHRO("UP_THRI ",  &
+    CALL LES_DIACHRO(TPDIAFILE,"UP_THRI ",  &
        "Updraft resolved <thri> covariance","Kkg/kg",XLES_UPDRAFT_ThRi,HLES_AVG)
 
-    CALL LES_DIACHRO("UP_THLRI",  &
+    CALL LES_DIACHRO(TPDIAFILE,"UP_THLRI",  &
        "Updraft resolved <thlri> covariance","Kkg/kg",XLES_UPDRAFT_ThlRi,HLES_AVG)
 
-    CALL LES_DIACHRO("UP_THVRI",  &
+    CALL LES_DIACHRO(TPDIAFILE,"UP_THVRI",  &
        "Updraft resolved <thvri> covariance","Kkg/kg",XLES_UPDRAFT_ThvRi,HLES_AVG)
 
-    CALL LES_DIACHRO("UP_WRI  ",  &
+    CALL LES_DIACHRO(TPDIAFILE,"UP_WRI  ",  &
        "Updraft resolved <wri> vertical flux","mkg/kg/s",XLES_UPDRAFT_WRi,HLES_AVG)
   END IF
 
   IF (NSV>0) THEN
-    CALL LES_DIACHRO_SV("UP_SV2  ",  &
+    CALL LES_DIACHRO_SV(TPDIAFILE,"UP_SV2  ",  &
        "Updraft resolved scalar variables variances","kg2/kg2",XLES_UPDRAFT_Sv2,HLES_AVG)
 
-    CALL LES_DIACHRO_SV("UP_THSV ", &
+    CALL LES_DIACHRO_SV(TPDIAFILE,"UP_THSV ", &
        "Updraft resolved <ThSv> variance","Kkg/kg",XLES_UPDRAFT_ThSv,HLES_AVG)
 
     IF (LUSERC) &
-    CALL LES_DIACHRO_SV("UP_THLSV",  &
+    CALL LES_DIACHRO_SV(TPDIAFILE,"UP_THLSV",  &
        "Updraft resolved <ThlSv> variance","Kkg/kg",XLES_UPDRAFT_ThlSv,HLES_AVG)
 
     IF (LUSERV) &
-    CALL LES_DIACHRO_SV("UP_THVSV",  &
+    CALL LES_DIACHRO_SV(TPDIAFILE,"UP_THVSV",  &
        "Updraft resolved <ThvSv> variance","Kkg/kg",XLES_UPDRAFT_ThvSv,HLES_AVG)
 
-    CALL LES_DIACHRO_SV("UP_WSV  ",  &
+    CALL LES_DIACHRO_SV(TPDIAFILE,"UP_WSV  ",  &
        "Updraft resolved <wSv> vertical flux","mkg/kg/s",XLES_UPDRAFT_WSv,HLES_AVG)
   END IF
 END IF
@@ -1109,156 +1112,156 @@ END IF
 !            --------------------
 !
 IF (LLES_DOWNDRAFT) THEN
-   CALL LES_DIACHRO("DW_FRAC ",  &
+   CALL LES_DIACHRO(TPDIAFILE,"DW_FRAC ",  &
        "Downdraft fraction","-",XLES_DOWNDRAFT,HLES_AVG)
 
-  CALL LES_DIACHRO("DW_W    ", &
+  CALL LES_DIACHRO(TPDIAFILE,"DW_W    ", &
        "Downdraft W mean value","m/s",XLES_DOWNDRAFT_W,HLES_AVG)
 
-  CALL LES_DIACHRO("DW_TH   ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"DW_TH   ",  &
        "Downdraft potential temperature mean value","K",XLES_DOWNDRAFT_Th,HLES_AVG)
 
   IF (LUSERC) &
-  CALL LES_DIACHRO("DW_THL  ", &
+  CALL LES_DIACHRO(TPDIAFILE,"DW_THL  ", &
        "Downdraft liquid potential temperature mean value","K",XLES_DOWNDRAFT_Thl,HLES_AVG)
 
   IF (LUSERV) &
-  CALL LES_DIACHRO("DW_THV  ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"DW_THV  ",  &
        "Downdraft virtual potential temperature mean value","K",XLES_DOWNDRAFT_Thv,HLES_AVG)
 
 
-  CALL LES_DIACHRO("DW_KE   ", &
+  CALL LES_DIACHRO(TPDIAFILE,"DW_KE   ", &
        "Downdraft resolved TKE mean value","m2/s2",XLES_DOWNDRAFT_Ke,HLES_AVG)
 
-  CALL LES_DIACHRO("DW_TKE  ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"DW_TKE  ",  &
        "Downdraft subgrid TKE mean value","m2/s2",XLES_DOWNDRAFT_Tke,HLES_AVG)
 
   IF (LUSERV) &
-  CALL LES_DIACHRO("DW_RV   ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"DW_RV   ",  &
        "Downdraft water vapor mean value","kg/kg",XLES_DOWNDRAFT_Rv,HLES_AVG)
 
   IF (LUSERC) &
-  CALL LES_DIACHRO("DW_RC   ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"DW_RC   ",  &
        "Downdraft cloud water mean value","kg/kg",XLES_DOWNDRAFT_Rc,HLES_AVG)
 
   IF (LUSERR) &
-  CALL LES_DIACHRO("DW_RR   ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"DW_RR   ",  &
        "Downdraft rain mean value","kg/kg",XLES_DOWNDRAFT_Rr,HLES_AVG)
 
   IF (LUSERI) &
-  CALL LES_DIACHRO("DW_RI   ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"DW_RI   ",  &
        "Downdraft ice mean value","kg/kg",XLES_DOWNDRAFT_Ri,HLES_AVG)
 
   IF (LUSERS) &
-  CALL LES_DIACHRO("DW_RS   ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"DW_RS   ",  &
        "Downdraft snow mean value","kg/kg",XLES_DOWNDRAFT_Rs,HLES_AVG)
 
   IF (LUSERG) &
-  CALL LES_DIACHRO("DW_RG   ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"DW_RG   ",  &
        "Downdraft graupel mean value","kg/kg",XLES_DOWNDRAFT_Rg,HLES_AVG)
 
   IF (LUSERH) &
-  CALL LES_DIACHRO("DW_RH   ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"DW_RH   ",  &
        "Downdraft hail mean value","kg/kg",XLES_DOWNDRAFT_Rh,HLES_AVG)
 
   IF (NSV>0) &
-  CALL LES_DIACHRO_SV("DW_SV   ", &
+  CALL LES_DIACHRO_SV(TPDIAFILE,"DW_SV   ", &
        "Downdraft scalar variables mean values","kg/kg",XLES_DOWNDRAFT_Sv,HLES_AVG)
   !
-  CALL LES_DIACHRO("DW_TH2 ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"DW_TH2 ",  &
        "Downdraft resolved Theta variance ","K2",XLES_DOWNDRAFT_Th2,HLES_AVG)
 
   IF (LUSERC) &
-  CALL LES_DIACHRO("DW_THL2",  &
+  CALL LES_DIACHRO(TPDIAFILE,"DW_THL2",  &
        "Downdraft resolved Theta_l variance ","K2",XLES_DOWNDRAFT_Thl2,HLES_AVG)
 
   IF (LUSERV) &
-  CALL LES_DIACHRO("DW_THTV ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"DW_THTV ",  &
        "Downdraft resolved Theta Theta_v covariance ","K2",XLES_DOWNDRAFT_ThThv,HLES_AVG)
 
   IF (LUSERC) &
-  CALL LES_DIACHRO("DW_TLTV ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"DW_TLTV ",  &
        "Downdraft resolved Theta_l Theta_v covariance ","K2",XLES_DOWNDRAFT_ThlThv,HLES_AVG)
 
-  CALL LES_DIACHRO("DW_WTH  ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"DW_WTH  ",  &
        "Downdraft resolved WTh flux","mK/s",XLES_DOWNDRAFT_WTh,HLES_AVG)
 
   IF (LUSERC) &
-  CALL LES_DIACHRO("DW_WTHL ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"DW_WTHL ",  &
        "Downdraft resolved WThl flux","mK/s",XLES_DOWNDRAFT_WThl,HLES_AVG)
 
   IF (LUSERV) &
-  CALL LES_DIACHRO("DW_WTHV ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"DW_WTHV ",  &
        "Downdraft resolved WThv flux","mK/s",XLES_DOWNDRAFT_WThv,HLES_AVG)
   !
   IF (LUSERV) THEN
-    CALL LES_DIACHRO("DW_RV2  ",  &
+    CALL LES_DIACHRO(TPDIAFILE,"DW_RV2  ",  &
        "Downdraft resolved water vapor variance","kg2/kg2",XLES_DOWNDRAFT_Rv2,HLES_AVG)
 
-    CALL LES_DIACHRO("DW_THRV ",  &
+    CALL LES_DIACHRO(TPDIAFILE,"DW_THRV ",  &
        "Downdraft resolved <thrv> covariance","Kkg/kg",XLES_DOWNDRAFT_ThRv,HLES_AVG)
 
     IF (LUSERC) &
-    CALL LES_DIACHRO("DW_THLRV",  &
+    CALL LES_DIACHRO(TPDIAFILE,"DW_THLRV",  &
        "Downdraft resolved <thlrv> covariance","Kkg/kg",XLES_DOWNDRAFT_ThlRv,HLES_AVG)
 
-    CALL LES_DIACHRO("DW_THVRV",  &
+    CALL LES_DIACHRO(TPDIAFILE,"DW_THVRV",  &
        "Downdraft resolved <thvrv> covariance","Kkg/kg",XLES_DOWNDRAFT_ThvRv,HLES_AVG)
 
-    CALL LES_DIACHRO("DW_WRV  ",  &
+    CALL LES_DIACHRO(TPDIAFILE,"DW_WRV  ",  &
        "Downdraft resolved <wrv> vertical flux","mkg/kg/s",XLES_DOWNDRAFT_WRv,HLES_AVG)
   END IF
 
   IF (LUSERC) THEN
-    CALL LES_DIACHRO("DW_RC2  ",  &
+    CALL LES_DIACHRO(TPDIAFILE,"DW_RC2  ",  &
        "Downdraft resolved cloud water variance","kg2/kg2",XLES_DOWNDRAFT_Rc2,HLES_AVG)
 
-    CALL LES_DIACHRO("DW_THRC ",  &
+    CALL LES_DIACHRO(TPDIAFILE,"DW_THRC ",  &
        "Downdraft resolved <thrc> covariance","Kkg/kg",XLES_DOWNDRAFT_ThRc,HLES_AVG)
 
-    CALL LES_DIACHRO("DW_THLRC",  &
+    CALL LES_DIACHRO(TPDIAFILE,"DW_THLRC",  &
        "Downdraft resolved <thlrc> covariance","Kkg/kg",XLES_DOWNDRAFT_ThlRc,HLES_AVG)
 
-    CALL LES_DIACHRO("DW_THVRC",  &
+    CALL LES_DIACHRO(TPDIAFILE,"DW_THVRC",  &
        "Downdraft resolved <thvrc> covariance","Kkg/kg",XLES_DOWNDRAFT_ThvRc,HLES_AVG)
 
-    CALL LES_DIACHRO("DW_WRC  ",  &
+    CALL LES_DIACHRO(TPDIAFILE,"DW_WRC  ",  &
        "Downdraft resolved <wrc> vertical flux","mkg/kg/s",XLES_DOWNDRAFT_WRc,HLES_AVG)
   END IF
 
   IF (LUSERI) THEN
-    CALL LES_DIACHRO("DW_RI2  ",  &
+    CALL LES_DIACHRO(TPDIAFILE,"DW_RI2  ",  &
        "Downdraft resolved cloud ice variance","kg2/kg2",XLES_DOWNDRAFT_Ri2,HLES_AVG)
 
-    CALL LES_DIACHRO("DW_THRI ",  &
+    CALL LES_DIACHRO(TPDIAFILE,"DW_THRI ",  &
        "Downdraft resolved <thri> covariance","Kkg/kg",XLES_DOWNDRAFT_ThRi,HLES_AVG)
 
-    CALL LES_DIACHRO("DW_THLRI", &
+    CALL LES_DIACHRO(TPDIAFILE,"DW_THLRI", &
        "Downdraft resolved <thlri> covariance","Kkg/kg",XLES_DOWNDRAFT_ThlRi,HLES_AVG)
 
-    CALL LES_DIACHRO("DW_THVRI",  &
+    CALL LES_DIACHRO(TPDIAFILE,"DW_THVRI",  &
        "Downdraft resolved <thvri> covariance","Kkg/kg",XLES_DOWNDRAFT_ThvRi,HLES_AVG)
 
-    CALL LES_DIACHRO("DW_WRI  ", &
+    CALL LES_DIACHRO(TPDIAFILE,"DW_WRI  ", &
        "Downdraft resolved <wri> vertical flux","mkg/kg/s",XLES_DOWNDRAFT_WRi,HLES_AVG)
   END IF
 
   IF (NSV>0) THEN
-    CALL LES_DIACHRO_SV("DW_SV2  ", &
+    CALL LES_DIACHRO_SV(TPDIAFILE,"DW_SV2  ", &
        "Downdraft resolved scalar variables variances","kg2/kg2",XLES_DOWNDRAFT_Sv2,HLES_AVG)
 
-   CALL LES_DIACHRO_SV("DW_THSV ",  &
+   CALL LES_DIACHRO_SV(TPDIAFILE,"DW_THSV ",  &
        "Downdraft resolved <ThSv> variance","Kkg/kg",XLES_DOWNDRAFT_ThSv,HLES_AVG)
 
     IF (LUSERC) &
-    CALL LES_DIACHRO_SV("DW_THLSV",  &
+    CALL LES_DIACHRO_SV(TPDIAFILE,"DW_THLSV",  &
        "Downdraft resolved <ThlSv> variance","Kkg/kg",XLES_DOWNDRAFT_ThlSv,HLES_AVG)
 
     IF (LUSERV) &
-    CALL LES_DIACHRO_SV("DW_THVSV",  &
+    CALL LES_DIACHRO_SV(TPDIAFILE,"DW_THVSV",  &
        "Downdraft resolved <ThvSv> variance","Kkg/kg",XLES_DOWNDRAFT_ThvSv,HLES_AVG)
 
-    CALL LES_DIACHRO_SV("DW_WSV  ", &
+    CALL LES_DIACHRO_SV(TPDIAFILE,"DW_WSV  ", &
        "Downdraft resolved <wSv> vertical flux","mkg/kg/s",XLES_DOWNDRAFT_WSv,HLES_AVG)
   END IF
 END IF
@@ -1270,123 +1273,123 @@ END IF
 !
 IF (HLES_AVG==' ' .OR. HLES_AVG=='A') THEN
 
-  CALL LES_DIACHRO_SURF("Q0      ",  &
+  CALL LES_DIACHRO_SURF(TPDIAFILE,"Q0      ",  &
      "Sensible heat flux at the surface","mK/s",XLES_Q0,HLES_AVG)
 
   IF (LUSERV) &
-  CALL LES_DIACHRO_SURF("E0      ",  &
+  CALL LES_DIACHRO_SURF(TPDIAFILE,"E0      ",  &
      "Latent heat flux at the surface","kg/kgm/s",XLES_E0,HLES_AVG)
      !writes  sw and lw flux and dthrad at all levels
-  CALL LES_DIACHRO("SWU      ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"SWU      ",  &
      "sw_up ","W/m2 ",XLES_SWU,HLES_AVG)
 
-  CALL LES_DIACHRO("SWD      ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"SWD      ",  &
      "sw_down ","W/m2 ",XLES_SWD,HLES_AVG)
      
-  CALL LES_DIACHRO("LWU      ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"LWU      ",  &
      "lw_up ","W/m2 ",XLES_LWU,HLES_AVG)
 
-  CALL LES_DIACHRO("LWD      ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"LWD      ",  &
      "lw_down ","W/m2 ",XLES_LWD,HLES_AVG)
 
-  CALL LES_DIACHRO("DTHRADSW      ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"DTHRADSW      ",  &
      "dthrad_sw ","K/s ",XLES_DTHRADSW,HLES_AVG)
 
-  CALL LES_DIACHRO("DTHRADLW      ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"DTHRADLW      ",  &
      "dthrad_lw ","K/s ",XLES_DTHRADLW,HLES_AVG)
 !writes mean_effective radius at all levels
-  CALL LES_DIACHRO("RADEFF      ",  &
+  CALL LES_DIACHRO(TPDIAFILE,"RADEFF      ",  &
      "mean effective radius ","microm ",XLES_RADEFF,HLES_AVG)
 
   IF (NSV>0) &
-  CALL LES_DIACHRO_SURF_SV("SV0     ",  &
+  CALL LES_DIACHRO_SURF_SV(TPDIAFILE,"SV0     ",  &
      "Scalar variable fluxes at the surface","kg/kgm/s",XLES_SV0,HLES_AVG)
 
-  CALL LES_DIACHRO_SURF("U*      ",  &
+  CALL LES_DIACHRO_SURF(TPDIAFILE,"U*      ",  &
      "Friction velocity","m/s",XLES_USTAR,HLES_AVG)
 
-  CALL LES_DIACHRO_SURF("W*      ",  &
+  CALL LES_DIACHRO_SURF(TPDIAFILE,"W*      ",  &
      "Convective velocity","m/s",XLES_WSTAR,HLES_AVG)
 
-  CALL LES_DIACHRO_SURF("BL_H    ",  &
+  CALL LES_DIACHRO_SURF(TPDIAFILE,"BL_H    ",  &
      "Boundary Layer Height","m",XLES_BL_HEIGHT,HLES_AVG)
 
-  CALL LES_DIACHRO_SURF("L_MO    ",  &
+  CALL LES_DIACHRO_SURF(TPDIAFILE,"L_MO    ",  &
      "Monin-Obukhov length","m",XLES_MO_LENGTH,HLES_AVG)
 
-  CALL LES_DIACHRO_SURF("INT_TKE    ",  &
+  CALL LES_DIACHRO_SURF(TPDIAFILE,"INT_TKE    ",  &
      "Vertical integrated tke","m2.s-2",XLES_INT_TKE,HLES_AVG)
 
   IF (LUSERC) &
-  CALL LES_DIACHRO_SURF("ZCB    ",  &
+  CALL LES_DIACHRO_SURF(TPDIAFILE,"ZCB    ",  &
      "Cloud base Height","m",XLES_ZCB,HLES_AVG)   
 
   IF (LUSERC) &
-  CALL LES_DIACHRO_SURF("ZCFTOT    ",  &
+  CALL LES_DIACHRO_SURF(TPDIAFILE,"ZCFTOT    ",  &
      "Total Cloud cover"," ",XLES_CFtot,HLES_AVG)   
 
   IF (LUSERC) &
-  CALL LES_DIACHRO_SURF("ZCF2TOT    ",  &
+  CALL LES_DIACHRO_SURF(TPDIAFILE,"ZCF2TOT    ",  &
      "Total Cloud cove 2r"," ",XLES_CF2tot,HLES_AVG)   
 
   IF (LUSERC) &
-  CALL LES_DIACHRO_SURF("LWP    ",  &
+  CALL LES_DIACHRO_SURF(TPDIAFILE,"LWP    ",  &
      "Liquid Water path","kg/m²",XLES_LWP,HLES_AVG)   
 
   IF (LUSERC) &
-  CALL LES_DIACHRO_SURF("LWPVAR ",  &
+  CALL LES_DIACHRO_SURF(TPDIAFILE,"LWPVAR ",  &
      "Liquid Water path variance","kg/m4",XLES_LWPVAR,HLES_AVG)   
 
   IF (LUSERR) &
-  CALL LES_DIACHRO_SURF("RWP    ",  &
+  CALL LES_DIACHRO_SURF(TPDIAFILE,"RWP    ",  &
      "Rain Water path","kg/m2",XLES_RWP,HLES_AVG)   
 
   IF (LUSERI) &
-  CALL LES_DIACHRO_SURF("IWP    ",  &
+  CALL LES_DIACHRO_SURF(TPDIAFILE,"IWP    ",  &
      "Ice Water path","kg/m2",XLES_IWP,HLES_AVG)   
 
   IF (LUSERS) &
-  CALL LES_DIACHRO_SURF("SWP    ",  &
+  CALL LES_DIACHRO_SURF(TPDIAFILE,"SWP    ",  &
      "Snow Water path","kg/m2",XLES_SWP,HLES_AVG)   
 
   IF (LUSERG) &
-  CALL LES_DIACHRO_SURF("GWP    ",  &
+  CALL LES_DIACHRO_SURF(TPDIAFILE,"GWP    ",  &
      "Graupel Water path","kg/m2",XLES_GWP,HLES_AVG)   
 
   IF (LUSERH) &
-  CALL LES_DIACHRO_SURF("HWP    ",  &
+  CALL LES_DIACHRO_SURF(TPDIAFILE,"HWP    ",  &
      "Hail Water path","kg/m2",XLES_HWP,HLES_AVG)   
 
   IF (LUSERR) &
-  CALL LES_DIACHRO_SURF("PREC_FRAC    ",  &
+  CALL LES_DIACHRO_SURF(TPDIAFILE,"PREC_FRAC    ",  &
   "Fract of col where rain at surface","",XLES_PRECFR,HLES_AVG)
 
   IF (LUSERR) &
-  CALL LES_DIACHRO_SURF("INST_PREC    ",  &
+  CALL LES_DIACHRO_SURF(TPDIAFILE,"INST_PREC    ",  &
      "Inst precip rate","mm/day",XLES_INPRR,HLES_AVG)
 
   IF (LUSERC) &
-  CALL LES_DIACHRO_SURF("INST_SEDIM   ",  &
+  CALL LES_DIACHRO_SURF(TPDIAFILE,"INST_SEDIM   ",  &
      "Inst cloud precip rate","mm/day",XLES_INPRC,HLES_AVG)
 
   IF (LUSERC .AND. (LDEPOSC .OR. LDEPOC)) &
-  CALL LES_DIACHRO_SURF("INST_DEPOS   ",  &
+  CALL LES_DIACHRO_SURF(TPDIAFILE,"INST_DEPOS   ",  &
      "Inst cloud deposi rate","mm/day",XLES_INDEP,HLES_AVG)
 
   IF (LUSERR) &
-  CALL LES_DIACHRO_SURF("RAIN_PREC    ",  &
+  CALL LES_DIACHRO_SURF(TPDIAFILE,"RAIN_PREC    ",  &
      "inst pr. rate over rainy grid cells","mm/day",XLES_RAIN_INPRR,HLES_AVG)   
      
   IF (LUSERR) &
-  CALL LES_DIACHRO_SURF("ACCU_PREC    ",  &
+  CALL LES_DIACHRO_SURF(TPDIAFILE,"ACCU_PREC    ",  &
      "Accu precip rate","mm/day",XLES_ACPRR,HLES_AVG)   
 
   IF (LUSERC) &
-  CALL LES_DIACHRO_SURF("ZMAXCF    ",  &
+  CALL LES_DIACHRO_SURF(TPDIAFILE,"ZMAXCF    ",  &
      "Height of Cloud fraction max","m",XLES_ZMAXCF,HLES_AVG)
 
   IF (LUSERC) &
-  CALL LES_DIACHRO_SURF("ZMAXCF2   ",  &
+  CALL LES_DIACHRO_SURF(TPDIAFILE,"ZMAXCF2   ",  &
      "Height of Cloud fraction2max","m",XLES_ZMAXCF2,HLES_AVG)
 
 END IF
@@ -1396,9 +1399,9 @@ END IF
 !*      4.   LES budgets
 !            -----------
 !
-CALL WRITE_LES_BUDGET_n(HLES_AVG)
-IF (LUSERV) CALL WRITE_LES_RT_BUDGET_n(HLES_AVG)
-IF (NSV>0)  CALL WRITE_LES_SV_BUDGET_n(HLES_AVG)
+CALL WRITE_LES_BUDGET_n(TPDIAFILE,HLES_AVG)
+IF (LUSERV) CALL WRITE_LES_RT_BUDGET_n(TPDIAFILE,HLES_AVG)
+IF (NSV>0)  CALL WRITE_LES_SV_BUDGET_n(TPDIAFILE,HLES_AVG)
 !
 !-------------------------------------------------------------------------------
 !
@@ -1407,68 +1410,68 @@ IF (NSV>0)  CALL WRITE_LES_SV_BUDGET_n(HLES_AVG)
 !
 IF (HLES_AVG==' ' .OR. HLES_AVG=='A') THEN
   IF (NSPECTRA_K>0) THEN
-    CALL LES_DIACHRO_2PT("UU   ","U*U     2 points correlations", &
+    CALL LES_DIACHRO_2PT(TPDIAFILE,"UU   ","U*U     2 points correlations", &
   "m2/s2",XCORRi_UU,    XCORRj_UU,HLES_AVG)
-    CALL LES_DIACHRO_2PT("VV   ","V*V     2 points correlations", &
+    CALL LES_DIACHRO_2PT(TPDIAFILE,"VV   ","V*V     2 points correlations", &
   "m2/s2",XCORRi_VV,    XCORRj_VV,HLES_AVG)
-    CALL LES_DIACHRO_2PT("WW   ","W*W     2 points correlations", &
+    CALL LES_DIACHRO_2PT(TPDIAFILE,"WW   ","W*W     2 points correlations", &
   "m2/s2",XCORRi_WW,    XCORRj_WW,HLES_AVG)
-    CALL LES_DIACHRO_2PT("UV   ","U*V     2 points correlations", &
+    CALL LES_DIACHRO_2PT(TPDIAFILE,"UV   ","U*V     2 points correlations", &
   "m2/s2",XCORRi_UV,    XCORRj_UV,HLES_AVG)
-    CALL LES_DIACHRO_2PT("WU   ","W*U     2 points correlations", &
+    CALL LES_DIACHRO_2PT(TPDIAFILE,"WU   ","W*U     2 points correlations", &
   "m2/s2",XCORRi_WU,    XCORRj_WU,HLES_AVG)
-    CALL LES_DIACHRO_2PT("WV   ","W*V     2 points correlations", &
+    CALL LES_DIACHRO_2PT(TPDIAFILE,"WV   ","W*V     2 points correlations", &
   "m2/s2",XCORRi_WV,    XCORRj_WV,HLES_AVG)
-    CALL LES_DIACHRO_2PT("THTH ","Th*Th   2 points correlations", &
+    CALL LES_DIACHRO_2PT(TPDIAFILE,"THTH ","Th*Th   2 points correlations", &
   "K2   ",XCORRi_ThTh,  XCORRj_ThTh,HLES_AVG)
     IF (LUSERC) &
-    CALL LES_DIACHRO_2PT("TLTL ","Thl*Thl 2 points correlations", &
+    CALL LES_DIACHRO_2PT(TPDIAFILE,"TLTL ","Thl*Thl 2 points correlations", &
   "K2   ",XCORRi_ThlThl,XCORRj_ThlThl,HLES_AVG)
-    CALL LES_DIACHRO_2PT("WTH  ","W*Th    2 points correlations", &
+    CALL LES_DIACHRO_2PT(TPDIAFILE,"WTH  ","W*Th    2 points correlations", &
   "mK/s ",XCORRi_WTh,   XCORRj_WTh,HLES_AVG)
     IF (LUSERC) &
-    CALL LES_DIACHRO_2PT("WTHL ","W*Thl   2 points correlations", &
+    CALL LES_DIACHRO_2PT(TPDIAFILE,"WTHL ","W*Thl   2 points correlations", &
   "mK/s ",XCORRi_WThl,  XCORRj_WThl,HLES_AVG)
     !
     IF (LUSERV) THEN
-      CALL LES_DIACHRO_2PT("RVRV ","rv*rv   2 points correlations", &
+      CALL LES_DIACHRO_2PT(TPDIAFILE,"RVRV ","rv*rv   2 points correlations", &
   "kg2/kg2 ",XCORRi_RvRv,  XCORRj_RvRv,HLES_AVG)
-      CALL LES_DIACHRO_2PT("THRV ","th*rv   2 points correlations", &
+      CALL LES_DIACHRO_2PT(TPDIAFILE,"THRV ","th*rv   2 points correlations", &
   "Kkg/kg  ",XCORRi_ThRv,  XCORRj_ThRv,HLES_AVG)
       IF (LUSERC) &
-      CALL LES_DIACHRO_2PT("TLRV ","thl*rv  2 points correlations", &
+      CALL LES_DIACHRO_2PT(TPDIAFILE,"TLRV ","thl*rv  2 points correlations", &
   "Kkg/kg  ",XCORRi_ThlRv, XCORRj_ThlRv,HLES_AVG)
-      CALL LES_DIACHRO_2PT("WRV  ","W*rv    2 points correlations", &
+      CALL LES_DIACHRO_2PT(TPDIAFILE,"WRV  ","W*rv    2 points correlations", &
   "mkg/s/kg",XCORRi_WRv,   XCORRj_WRv,HLES_AVG)
     END IF
     IF (LUSERC) THEN
-      CALL LES_DIACHRO_2PT("RCRC ","rc*rc   2 points correlations", &
+      CALL LES_DIACHRO_2PT(TPDIAFILE,"RCRC ","rc*rc   2 points correlations", &
   "kg2/kg2 ",XCORRi_RcRc,  XCORRj_RcRc,HLES_AVG)
-      CALL LES_DIACHRO_2PT("THRC ","th*rc   2 points correlations", &
+      CALL LES_DIACHRO_2PT(TPDIAFILE,"THRC ","th*rc   2 points correlations", &
   "Kkg/kg  ",XCORRi_ThRc,  XCORRj_ThRc,HLES_AVG)
-      CALL LES_DIACHRO_2PT("TLRC ","thl*rc  2 points correlations", &
+      CALL LES_DIACHRO_2PT(TPDIAFILE,"TLRC ","thl*rc  2 points correlations", &
   "Kkg/kg  ",XCORRi_ThlRc, XCORRj_ThlRc,HLES_AVG)
-      CALL LES_DIACHRO_2PT("WRC  ","W*rc    2 points correlations", &
+      CALL LES_DIACHRO_2PT(TPDIAFILE,"WRC  ","W*rc    2 points correlations", &
   "mkg/s/kg",XCORRi_WRc,   XCORRj_WRc,HLES_AVG)
     END IF
     IF (LUSERI) THEN
-      CALL LES_DIACHRO_2PT("RCRC ","ri*ri   2 points correlations", &
+      CALL LES_DIACHRO_2PT(TPDIAFILE,"RCRC ","ri*ri   2 points correlations", &
   "kg2/kg2 ",XCORRi_RiRi,  XCORRj_RiRi,HLES_AVG)
-      CALL LES_DIACHRO_2PT("THRC ","th*ri   2 points correlations", &
+      CALL LES_DIACHRO_2PT(TPDIAFILE,"THRC ","th*ri   2 points correlations", &
   "Kkg/kg  ",XCORRi_ThRi,  XCORRj_ThRi,HLES_AVG)
-      CALL LES_DIACHRO_2PT("TLRC ","thl*ri  2 points correlations", &
+      CALL LES_DIACHRO_2PT(TPDIAFILE,"TLRC ","thl*ri  2 points correlations", &
   "Kkg/kg  ",XCORRi_ThlRi, XCORRj_ThlRi,HLES_AVG)
-      CALL LES_DIACHRO_2PT("WRC  ","W*ri    2 points correlations", &
+      CALL LES_DIACHRO_2PT(TPDIAFILE,"WRC  ","W*ri    2 points correlations", &
   "mkg/s/kg",XCORRi_WRi,   XCORRj_WRi,HLES_AVG)
     END IF
     DO JSV=1,NSV
       WRITE (YGROUP,FMT="(A2,I3.3)") "SS",JSV
-      CALL LES_DIACHRO_2PT(YGROUP,"Sv*Sv   2 points correlations", &
+      CALL LES_DIACHRO_2PT(TPDIAFILE,YGROUP,"Sv*Sv   2 points correlations", &
   "kg2/kg2 ",XCORRi_SvSv(:,:,:,JSV),  XCORRj_SvSv(:,:,:,JSV),HLES_AVG)
     END DO
     DO JSV=1,NSV
       WRITE (YGROUP,FMT="(A2,I3.3)") "WS",JSV
-      CALL LES_DIACHRO_2PT(YGROUP,"W*Sv    2 points correlations", &
+      CALL LES_DIACHRO_2PT(TPDIAFILE,YGROUP,"W*Sv    2 points correlations", &
  "mkg/s/kg",XCORRi_WSv(:,:,:,JSV),   XCORRj_WSv(:,:,:,JSV),HLES_AVG)
     END DO
   END IF
@@ -1479,7 +1482,7 @@ END IF
 !*      6.   spectra and time-averaged profiles (if first call to WRITE_LES_n)
 !            ----------------------------------
 !
-IF (HLES_AVG==' ') CALL LES_SPEC_n
+IF (HLES_AVG==' ') CALL LES_SPEC_n(TPDIAFILE)
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/write_lfifmn_fordiachron.f90 b/src/MNH/write_lfifmn_fordiachron.f90
index 4ca7f4acb..ef608331e 100644
--- a/src/MNH/write_lfifmn_fordiachron.f90
+++ b/src/MNH/write_lfifmn_fordiachron.f90
@@ -8,7 +8,7 @@
 ! $Source$ $Revision$
 !-----------------------------------------------------------------
 !     #############################################
-      SUBROUTINE WRITE_LFIFMN_FORDIACHRO_n(HFMFILE)
+      SUBROUTINE WRITE_LFIFMN_FORDIACHRO_n(TPFILE)
 !     #############################################
 !
 !!****  *WRITE_LFIFM_FORDIACHRO_n* - routine to write a LFIFM file for model _n
@@ -16,7 +16,7 @@
 !!    PURPOSE
 !!    -------
 !        The purpose of this routine is to write an initial LFIFM File
-!     of name HFMFILE//'.lfi' with the FM routines.
+!     of name YFMFILE//'.lfi' with the FM routines.
 !
 !!**  METHOD
 !!    ------
@@ -101,6 +101,9 @@ USE MODD_LUNIT_n
 USE MODD_TIME
 USE MODD_TYPE_DATE
 USE MODD_NESTING
+USE MODD_IO_ll, ONLY: TFILEDATA
+!
+USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL
 USE MODE_FMWRIT
 USE MODE_GRIDPROJ
 USE MODE_ll
@@ -110,26 +113,21 @@ IMPLICIT NONE
 !
 !*       0.1   Declarations of arguments
 !
-CHARACTER(LEN=28), INTENT(IN) :: HFMFILE      ! Name of FM-file to write
+TYPE(TFILEDATA),INTENT(IN) :: TPFILE
 !
 !*       0.2   Declarations of local variables
 !
-INTEGER           :: IRESP          ! IRESP  : return-code if a problem appears
-                                    !  at the open of the file                                                                      !  LFI  routines
-INTEGER           :: IGRID          ! IGRID : grid indicator
-INTEGER           :: ILENCH         ! ILENCH : length of comment string
-!
-CHARACTER(LEN=16) :: YRECFM         ! Name of the article to be written
-CHARACTER(LEN=100) :: YCOMMENT       ! Comment string
+INTEGER                           :: IRESP          ! return-code!
 !
-LOGICAL                :: GPACK
+LOGICAL                           :: GPACK
 !
 REAL                              :: ZLATOR, ZLONOR ! geographical coordinates of 1st mass point
 REAL                              :: ZXHATM, ZYHATM ! conformal    coordinates of 1st mass point
-REAL, DIMENSION(:), ALLOCATABLE   :: ZXHAT_ll    !  Position x in the conformal
-                                                 ! plane (array on the complete domain)
-REAL, DIMENSION(:), ALLOCATABLE   :: ZYHAT_ll    !   Position y in the conformal
-                                                 ! plane (array on the complete domain)
+REAL, DIMENSION(:), ALLOCATABLE   :: ZXHAT_ll       !  Position x in the conformal
+                                                    ! plane (array on the complete domain)
+REAL, DIMENSION(:), ALLOCATABLE   :: ZYHAT_ll       !   Position y in the conformal
+                                                    ! plane (array on the complete domain)
+TYPE(TFIELDDATA)                  :: TZFIELD
 !
 !-------------------------------------------------------------------------------
 !
@@ -138,122 +136,33 @@ LPACK=.FALSE.
 !
 !*       1.0    Version :
 !
-YRECFM='MASDEV'
-!CALL ELIM(YRECFM)
-YCOMMENT=' '
-IGRID=0
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'--',NMASDEV,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='BUGFIX'
-!CALL ELIM(YRECFM)
-YCOMMENT=' '
-IGRID=0
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'--',NBUGFIX,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='BIBUSER'
-!CALL ELIM(YRECFM)
-YCOMMENT=' '
-IGRID=0
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'--',CBIBUSER,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='PROGRAM'
-!CALL ELIM(YRECFM)
-YCOMMENT=' '
-IGRID=0
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'--',CPROGRAM,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='L1D'
-!CALL ELIM(YRECFM)
-YCOMMENT=' '
-IGRID=0
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'--',L1D,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='L2D'
-YCOMMENT=' '
-IGRID=0
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'--',L2D,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='PACK'
-!CALL ELIM(YRECFM)
-YCOMMENT=' '
-IGRID=0
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'--',LPACK,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='SURF'
-!CALL ELIM(YRECFM)
-YCOMMENT=' '
-IGRID=0
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'--',CSURF,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='STORAGE_TYPE'
-!CALL ELIM(YRECFM)
-YCOMMENT=' '
-IGRID=0
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'--',CSTORAGE_TYPE,IGRID,ILENCH,YCOMMENT,IRESP)
+CALL IO_WRITE_FIELD(TPFILE,'MASDEV', CLUOUT,IRESP,NMASDEV)
+CALL IO_WRITE_FIELD(TPFILE,'BUGFIX', CLUOUT,IRESP,NBUGFIX)
+CALL IO_WRITE_FIELD(TPFILE,'BIBUSER',CLUOUT,IRESP,CBIBUSER)
+CALL IO_WRITE_FIELD(TPFILE,'PROGRAM',CLUOUT,IRESP,CPROGRAM)
+!
+CALL IO_WRITE_FIELD(TPFILE,'L1D', CLUOUT,IRESP,L1D)
+CALL IO_WRITE_FIELD(TPFILE,'L2D', CLUOUT,IRESP,L2D)
+CALL IO_WRITE_FIELD(TPFILE,'PACK',CLUOUT,IRESP,LPACK)
+CALL IO_WRITE_FIELD(TPFILE,'SURF',CLUOUT,IRESP,CSURF)
+!
+CALL IO_WRITE_FIELD(TPFILE,'STORAGE_TYPE',CLUOUT,IRESP,CSTORAGE_TYPE)
 !
 !*       1.1    Dimensions :
 !
-YRECFM='IMAX'
-!CALL ELIM(YRECFM)
-YCOMMENT=' '
-IGRID=0
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'--',NIMAX_ll,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='JMAX'
-!CALL ELIM(YRECFM)
-YCOMMENT=' '
-IGRID=0
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'--',NJMAX_ll,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='KMAX'
-!CALL ELIM(YRECFM)
-YCOMMENT=' '
-IGRID=0
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'--',NKMAX,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='JPHEXT'
-!CALL ELIM(YRECFM)
-YCOMMENT=' '
-IGRID=0
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'--',JPHEXT,IGRID,ILENCH,YCOMMENT,IRESP)
+CALL IO_WRITE_FIELD(TPFILE,'IMAX',CLUOUT,IRESP,NIMAX_ll)
+CALL IO_WRITE_FIELD(TPFILE,'JMAX',CLUOUT,IRESP,NJMAX_ll)
+CALL IO_WRITE_FIELD(TPFILE,'KMAX',CLUOUT,IRESP,NKMAX)
+!
+CALL IO_WRITE_FIELD(TPFILE,'JPHEXT',CLUOUT,IRESP,JPHEXT)
 !
 !*       1.2    Grid variables :
 !
 IF (.NOT.LCARTESIAN) THEN
 !
-  YRECFM='RPK'
-  !CALL ELIM(YRECFM)
-  YCOMMENT=' '
-  IGRID=0
-  ILENCH=LEN(YCOMMENT)
-  CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'--',XRPK,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-  YRECFM='LONORI'
-  !CALL ELIM(YRECFM)
-  YCOMMENT='DEGREES'
-  IGRID=0
-  ILENCH=LEN(YCOMMENT)
-  CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'--',XLONORI,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-  YRECFM='LATORI'
-  !CALL ELIM(YRECFM)
-  YCOMMENT='DEGREES'
-  IGRID=0
-  ILENCH=LEN(YCOMMENT)
-  CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'--',XLATORI,IGRID,ILENCH,YCOMMENT,IRESP)
+  CALL IO_WRITE_FIELD(TPFILE,'RPK',   CLUOUT,IRESP,XRPK)
+  CALL IO_WRITE_FIELD(TPFILE,'LONORI',CLUOUT,IRESP,XLONORI)
+  CALL IO_WRITE_FIELD(TPFILE,'LATORI',CLUOUT,IRESP,XLATORI)
   !
   !* diagnostic of 1st mass point
   !
@@ -265,201 +174,69 @@ IF (.NOT.LCARTESIAN) THEN
   CALL SM_LATLON(XLATORI,XLONORI,ZXHATM,ZYHATM,ZLATOR,ZLONOR)
   DEALLOCATE(ZXHAT_ll,ZYHAT_ll)
 !
-  YRECFM='LONOR'
-  YCOMMENT='DEGREES'
-  IGRID=0
-  ILENCH=LEN(YCOMMENT)
-  CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'--',ZLONOR,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-  YRECFM='LATOR'
-  YCOMMENT='DEGREES'
-  IGRID=0
-  ILENCH=LEN(YCOMMENT)
-  CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'--',ZLATOR,IGRID,ILENCH,YCOMMENT,IRESP)
+  !LONOR and LATOR not in TFIELDLIST because local variables
+  TZFIELD%CMNHNAME   = 'LONOR'
+  TZFIELD%CSTDNAME   = ''
+  TZFIELD%CLONGNAME  = 'MesoNH: LONOR'
+  TZFIELD%CUNITS     = 'degree'
+  TZFIELD%CDIR       = '--'
+  TZFIELD%CCOMMENT   = 'Longitude of 1st mass point'
+  TZFIELD%NGRID      = 0
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 0
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZLONOR)
+!
+  TZFIELD%CMNHNAME   = 'LATOR'
+  TZFIELD%CLONGNAME  = 'MesoNH: LATOR'
+  TZFIELD%CCOMMENT   = 'Latitude of 1st mass point'
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZLATOR)
 !
 ! #ifdef MNH_NCWRIT
 !   IF (LNETCDF) THEN
 !     LLFIFM = .FALSE.
-!     YRECFM='LAT'
-!     YCOMMENT='X_Y_latitude (degree)'
-!     IGRID=1
-!     ILENCH=LEN(YCOMMENT)
-!     CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'XY',XLAT,IGRID,ILENCH,YCOMMENT,IRESP)
-! 
-!     YRECFM='LON'
-!     YCOMMENT='X_Y_longitude (degree)'
-!     IGRID=1
-!     ILENCH=LEN(YCOMMENT)
-!     CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'XY',XLON,IGRID,ILENCH,YCOMMENT,IRESP)
+!     CALL IO_WRITE_FIELD(TPFILE,'LAT',CLUOUT,IRESP,XLAT)
+!     CALL IO_WRITE_FIELD(TPFILE,'LON',CLUOUT,IRESP,XLON)
 !     LLFIFM = .TRUE.
 !   END IF
 ! #endif
 END IF
 !
-YRECFM='THINSHELL'
-!CALL ELIM(YRECFM)
-YCOMMENT=' '
-IGRID=0
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'--',LTHINSHELL,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='LAT0'
-!CALL ELIM(YRECFM)
-YCOMMENT='reference latitude for conformal projection (DEGREES)'
-IGRID=0
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'--',XLAT0,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='LON0'
-!CALL ELIM(YRECFM)
-YCOMMENT='reference longitude for conformal projection (DEGREES)'
-IGRID=0
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'--',XLON0,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='BETA'
-!CALL ELIM(YRECFM)
-YCOMMENT='rotation angle (DEGREES)'
-IGRID=0
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'--',XBETA,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='XHAT'
-!CALL ELIM(YRECFM)
-YCOMMENT='Position x in the conformal or cartesian plane (METERS)'
-IGRID=2
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'XX',XXHAT,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='YHAT'
-!CALL ELIM(YRECFM)
-YCOMMENT='Position y in the conformal or cartesian plane (METERS)'
-IGRID=3
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'YY',XYHAT,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='ZHAT'
-!CALL ELIM(YRECFM)
-YCOMMENT='height level without orography (METERS)'
-IGRID=4
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'--',XZHAT,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='ZS'
-!CALL ELIM(YRECFM)
-YCOMMENT='orography (METERS)'
-IGRID=4
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'XY',XZS,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='ZSMT'
-!CALL ELIM(YRECFM)
-YCOMMENT='smooth orography (METERS)'
-IGRID=4
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'XY',XZSMT,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='SLEVE'
-!CALL ELIM(YRECFM)
-YCOMMENT=' '
-IGRID=4
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'--',LSLEVE,IGRID,ILENCH,YCOMMENT,IRESP)
+CALL IO_WRITE_FIELD(TPFILE,'THINSHELL',CLUOUT,IRESP,LTHINSHELL)
+CALL IO_WRITE_FIELD(TPFILE,'LAT0',CLUOUT,IRESP,XLAT0)
+CALL IO_WRITE_FIELD(TPFILE,'LON0',CLUOUT,IRESP,XLON0)
+CALL IO_WRITE_FIELD(TPFILE,'BETA',CLUOUT,IRESP,XBETA)
+!
+CALL IO_WRITE_FIELD(TPFILE,'XHAT',CLUOUT,IRESP,XXHAT)
+CALL IO_WRITE_FIELD(TPFILE,'YHAT',CLUOUT,IRESP,XYHAT)
+CALL IO_WRITE_FIELD(TPFILE,'ZHAT',CLUOUT,IRESP,XZHAT)
+!
+CALL IO_WRITE_FIELD(TPFILE,'ZS',   CLUOUT,IRESP,XZS)
+CALL IO_WRITE_FIELD(TPFILE,'ZSMT', CLUOUT,IRESP,XZSMT)
+CALL IO_WRITE_FIELD(TPFILE,'SLEVE',CLUOUT,IRESP,LSLEVE)
 !
 IF (LSLEVE) THEN
-  YRECFM='LEN1'
-  !CALL ELIM(YRECFM)
-  YCOMMENT='METERS'
-  IGRID=4
-  ILENCH=LEN(YCOMMENT)
-  CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'--',XLEN1,IGRID,ILENCH,YCOMMENT,IRESP)
-  YRECFM='LEN2'
-  !CALL ELIM(YRECFM)
-  YCOMMENT='METERS'
-  IGRID=4
-  ILENCH=LEN(YCOMMENT)
-  CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'--',XLEN2,IGRID,ILENCH,YCOMMENT,IRESP)
+  CALL IO_WRITE_FIELD(TPFILE,'LEN1',CLUOUT,IRESP,XLEN1)
+  CALL IO_WRITE_FIELD(TPFILE,'LEN2',CLUOUT,IRESP,XLEN2)
 END IF
 !
-YRECFM='DTCUR'
-!CALL ELIM(YRECFM)
-YCOMMENT='-'
-ILENCH=LEN(YCOMMENT)
-IGRID=0
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'--',TDTCUR,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='DTEXP'
-YCOMMENT='-'
-ILENCH=LEN(YCOMMENT)
-!CALL ELIM(YRECFM)
-IGRID=0
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'--',TDTEXP,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='DTMOD'
-!CALL ELIM(YRECFM)
-YCOMMENT='-'
-ILENCH=LEN(YCOMMENT)
-IGRID=0
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'--',TDTMOD,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='DTSEG'
-!CALL ELIM(YRECFM)
-YCOMMENT='-'
-ILENCH=LEN(YCOMMENT)
-IGRID=0
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'--',TDTSEG,IGRID,ILENCH,YCOMMENT,IRESP)
+CALL IO_WRITE_FIELD(TPFILE,'DTMOD',CLUOUT,IRESP,TDTMOD)
+CALL IO_WRITE_FIELD(TPFILE,'DTCUR',CLUOUT,IRESP,TDTCUR)
+CALL IO_WRITE_FIELD(TPFILE,'DTEXP',CLUOUT,IRESP,TDTEXP)
+CALL IO_WRITE_FIELD(TPFILE,'DTSEG',CLUOUT,IRESP,TDTSEG)
 !
 !*       1.3    Configuration  variables :
 !
-YRECFM='CARTESIAN'
-!CALL ELIM(YRECFM)
-YCOMMENT='Logical for cartesian geometry '
-IGRID=0
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'--',LCARTESIAN,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='LBOUSS'       
-YCOMMENT='Logical for Boussinesq'               
-IGRID=0
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'--',LBOUSS,IGRID,ILENCH,YCOMMENT,IRESP)
+CALL IO_WRITE_FIELD(TPFILE,'CARTESIAN',CLUOUT,IRESP,LCARTESIAN)
+CALL IO_WRITE_FIELD(TPFILE,'LBOUSS',   CLUOUT,IRESP,LBOUSS)
 !
 !*       1.6    Reference state variables :
 !
-YRECFM='RHOREFZ'
-!CALL ELIM(YRECFM)
-YCOMMENT='rhodz for reference state without orography (kg/m3)'
-IGRID=4
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'--',XRHODREFZ,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='THVREFZ'
-!CALL ELIM(YRECFM)
-YCOMMENT='thetavz for reference state without orography (K)'
-IGRID=4
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'--',XTHVREFZ,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='EXNTOP'
-!CALL ELIM(YRECFM)
-YCOMMENT='Exner function at model top'
-IGRID=4
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'--',XEXNTOP,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='RHODREF'
-!CALL ELIM(YRECFM)
-YCOMMENT='Dry density for reference state with orography (kg/m3)'
-IGRID=1
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'XY',XRHODREF,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='THVREF'
-YCOMMENT='Thetav for reference state with orography (K)'
-YCOMMENT='  '
-IGRID=1
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'XY',XTHVREF,IGRID,ILENCH,YCOMMENT,IRESP)
+CALL IO_WRITE_FIELD(TPFILE,'RHOREFZ',CLUOUT,IRESP,XRHODREFZ)
+CALL IO_WRITE_FIELD(TPFILE,'THVREFZ',CLUOUT,IRESP,XTHVREFZ)
+CALL IO_WRITE_FIELD(TPFILE,'EXNTOP', CLUOUT,IRESP,XEXNTOP)
+!
+CALL IO_WRITE_FIELD(TPFILE,'RHODREF',CLUOUT,IRESP,XRHODREF)
+CALL IO_WRITE_FIELD(TPFILE,'THVREF', CLUOUT,IRESP,XTHVREF)
 !
 LPACK=GPACK
 !
diff --git a/src/MNH/write_profilern.f90 b/src/MNH/write_profilern.f90
index b2b24c93f..ae4c1f669 100644
--- a/src/MNH/write_profilern.f90
+++ b/src/MNH/write_profilern.f90
@@ -14,9 +14,11 @@ MODULE MODI_WRITE_PROFILER_n
 !
 INTERFACE
 !
-      SUBROUTINE WRITE_PROFILER_n(HFMDIAC)
+      SUBROUTINE WRITE_PROFILER_n(TPDIAFILE)
 !
-CHARACTER(LEN=*), INTENT(IN) :: HFMDIAC  ! diachronic file name
+USE MODD_IO_ll, ONLY: TFILEDATA
+!
+TYPE(TFILEDATA),  INTENT(IN) :: TPDIAFILE ! diachronic file to write
 !
 END SUBROUTINE WRITE_PROFILER_n
 !
@@ -25,7 +27,7 @@ END INTERFACE
 END MODULE MODI_WRITE_PROFILER_n
 !
 !     ##########################################
-      SUBROUTINE WRITE_PROFILER_n(HFMDIAC)
+      SUBROUTINE WRITE_PROFILER_n(TPDIAFILE)
 !     ##########################################
 !
 !
@@ -68,6 +70,7 @@ END MODULE MODI_WRITE_PROFILER_n
 !          ------------
 !
 USE MODD_CST
+USE MODD_IO_ll, ONLY: TFILEDATA
 USE MODD_LUNIT
 USE MODD_PARAMETERS
 !
@@ -98,7 +101,7 @@ IMPLICIT NONE
 !
 !*      0.1  declarations of arguments
 !
-CHARACTER(LEN=*), INTENT(IN) :: HFMDIAC  ! diachronic file name
+TYPE(TFILEDATA),  INTENT(IN) :: TPDIAFILE ! diachronic file to write
 !
 !-------------------------------------------------------------------------------
 !
@@ -607,7 +610,7 @@ ALLOCATE (ZW6(1,1,IKU,SIZE(TPROFILER%TIME),1,JPROC))
 ZW6 = ZWORK6(:,:,:,:,:,:JPROC)
 DEALLOCATE(ZWORK6)
 
-CALL WRITE_DIACHRO(HFMDIAC,CLUOUT0,YGROUP,"CART",IGRID(:JPROC), TPROFILER%DATIME,&
+CALL WRITE_DIACHRO(TPDIAFILE,CLUOUT0,YGROUP,"CART",IGRID(:JPROC), TPROFILER%DATIME,&
                    ZW6,ZTRAJT,YTITLE(:JPROC),YUNIT(:JPROC),YCOMMENT(:JPROC),     &
                    .TRUE.,.TRUE.,.FALSE.,                                        &
                    KIL=1,KIH=1,KJL=1,KJH=1,KKL=1,KKH=IKU                         )
diff --git a/src/MNH/write_seriesn.f90 b/src/MNH/write_seriesn.f90
index c319f191a..8730b9316 100644
--- a/src/MNH/write_seriesn.f90
+++ b/src/MNH/write_seriesn.f90
@@ -11,11 +11,15 @@
  MODULE MODI_WRITE_SERIES_n
 !########################
 !
+IMPLICIT NONE
+!
 INTERFACE
 !
-      SUBROUTINE WRITE_SERIES_n(HFILEDIA,HLUOUT )
+      SUBROUTINE WRITE_SERIES_n(TPDIAFILE,HLUOUT)
+!
+USE MODD_IO_ll, ONLY: TFILEDATA
 !
-CHARACTER (LEN=*),  INTENT(IN) :: HFILEDIA     ! name of FM-file to write
+TYPE(TFILEDATA),    INTENT(IN) :: TPDIAFILE    ! file to write
 CHARACTER (LEN=*),  INTENT(IN) :: HLUOUT       ! name of output listing
 !
 END SUBROUTINE WRITE_SERIES_n
@@ -24,7 +28,7 @@ END INTERFACE
 !
 END MODULE MODI_WRITE_SERIES_n
 !     ###################
-      SUBROUTINE WRITE_SERIES_n (HFILEDIA,HLUOUT)
+      SUBROUTINE WRITE_SERIES_n (TPDIAFILE,HLUOUT)
 
 !     #######################################################################################       
 !
@@ -71,6 +75,7 @@ USE MODD_SERIES
 USE MODD_SERIES_n
 USE MODD_CONF, ONLY: NVERB
 USE MODD_PARAMETERS
+USE MODD_IO_ll, ONLY: TFILEDATA
 USE MODI_WRITE_DIACHRO
 USE MODI_GATHER_ll
 USE MODE_ll
@@ -80,7 +85,7 @@ IMPLICIT NONE
 !
 !*       0.1   declarations of arguments
 !
-CHARACTER (LEN=*),  INTENT(IN) :: HFILEDIA     ! name of FM-file to write
+TYPE(TFILEDATA),    INTENT(IN) :: TPDIAFILE    ! file to write
 CHARACTER (LEN=*),  INTENT(IN) :: HLUOUT       ! name of output listing
 !
 !*       0.2     Local variables 
@@ -249,7 +254,7 @@ ENDIF
 !*      2.3  Write in diachro file
 !
 GICP=.TRUE. ; GJCP=.TRUE. ; GKCP=.TRUE.
-CALL WRITE_DIACHRO(HFILEDIA,HLUOUT,'TSERIES','CART',NSGRIDD1,XSDATIME(:,1:NSNBSTEPT),   &
+CALL WRITE_DIACHRO(TPDIAFILE,HLUOUT,'TSERIES','CART',NSGRIDD1,XSDATIME(:,1:NSNBSTEPT),   &
                    XSSERIES1(1:1,1:1,1:1,1:NSNBSTEPT,:,:),               &
                    XSTRAJT(1:NSNBSTEPT,:),CSTITLE1,CSUNIT1,CSCOMMENT1,   &
                    GICP,GJCP,GKCP,                               &
@@ -310,7 +315,7 @@ DEALLOCATE(ZVAR3D)
 !*      3.2  Write in diachro file
 !
 GICP=.TRUE. ; GJCP=.TRUE. ; GKCP=.FALSE.
-CALL WRITE_DIACHRO(HFILEDIA,HLUOUT,'ZTSERIES','CART',NSGRIDD2,XSDATIME(:,1:NSNBSTEPT),   &
+CALL WRITE_DIACHRO(TPDIAFILE,HLUOUT,'ZTSERIES','CART',NSGRIDD2,XSDATIME(:,1:NSNBSTEPT),   &
                    XSSERIES2(1:1,1:1,1:IKMAX,1:NSNBSTEPT,:,:),            &
                    XSTRAJT(1:NSNBSTEPT,:),CSTITLE2,CSUNIT2,CSCOMMENT2,    &
                    GICP,GJCP,GKCP,                 &
@@ -370,7 +375,7 @@ DO JS=1,NBJSLICE
     YSTITLE3S(JT)=ADJUSTL(ADJUSTR(CSTITLE3(JT))//'Y'//YSL//'-'//YSH)
   END DO
   GICP=.FALSE. ; GJCP=.TRUE. ; GKCP=.TRUE.
-  CALL WRITE_DIACHRO(HFILEDIA,HLUOUT,YGROUP,'CART',NSGRIDD3,XSDATIME(:,1:NSNBSTEPT),    &
+  CALL WRITE_DIACHRO(TPDIAFILE,HLUOUT,YGROUP,'CART',NSGRIDD3,XSDATIME(:,1:NSNBSTEPT),    &
                       ZSERIES3_ll(1:IIU_ll,1:1,1:1,1:NSNBSTEPT,1:1,ISB1:ISB2),&
                       XSTRAJT(1:NSNBSTEPT,:),YSTITLE3S,CSUNIT3,CSCOMMENT3,     &
                       GICP,GJCP,GKCP,                               &
diff --git a/src/MNH/write_stationn.f90 b/src/MNH/write_stationn.f90
index 0f5094c92..139e1730d 100644
--- a/src/MNH/write_stationn.f90
+++ b/src/MNH/write_stationn.f90
@@ -14,9 +14,11 @@ MODULE MODI_WRITE_STATION_n
 !
 INTERFACE
 !
-      SUBROUTINE WRITE_STATION_n(HFMDIAC)
+      SUBROUTINE WRITE_STATION_n(TPDIAFILE)
 !
-CHARACTER(LEN=*), INTENT(IN) :: HFMDIAC  ! diachronic file name
+USE MODD_IO_ll, ONLY: TFILEDATA
+!
+TYPE(TFILEDATA),  INTENT(IN) :: TPDIAFILE ! diachronic file to write
 !
 END SUBROUTINE WRITE_STATION_n
 !
@@ -25,7 +27,7 @@ END INTERFACE
 END MODULE MODI_WRITE_STATION_n
 !
 !     ##########################################
-      SUBROUTINE WRITE_STATION_n(HFMDIAC)
+      SUBROUTINE WRITE_STATION_n(TPDIAFILE)
 !     ##########################################
 !
 !
@@ -66,6 +68,7 @@ END MODULE MODI_WRITE_STATION_n
 !          ------------
 !
 USE MODD_CST
+USE MODD_IO_ll, ONLY: TFILEDATA
 USE MODD_LUNIT
 USE MODD_PARAMETERS
 !
@@ -94,7 +97,7 @@ IMPLICIT NONE
 !
 !*      0.1  declarations of arguments
 !
-CHARACTER(LEN=*), INTENT(IN) :: HFMDIAC  ! diachronic file name
+TYPE(TFILEDATA),  INTENT(IN) :: TPDIAFILE ! diachronic file to write
 !
 !-------------------------------------------------------------------------------
 !
@@ -610,7 +613,7 @@ ZW6 = ZWORK6(:,:,:,:,:,:JPROC)
 DEALLOCATE(ZWORK6)
 
 !
-  CALL WRITE_DIACHRO(HFMDIAC,CLUOUT0,YGROUP,"CART",IGRID, TSTATION%DATIME,&
+  CALL WRITE_DIACHRO(TPDIAFILE,CLUOUT0,YGROUP,"CART",IGRID, TSTATION%DATIME,&
                      ZW6,ZTRAJT,YTITLE,YUNIT,YCOMMENT,&
                      .TRUE.,.TRUE.,.FALSE.,                             &
                      KIL=1,KIH=1,KJL=1,KJH=1,KKL=1,KKH=1   )
-- 
GitLab