From 608953f0420072b4d4920d5a52ac5b7d309bb003 Mon Sep 17 00:00:00 2001
From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Date: Mon, 20 Mar 2017 14:49:43 +0100
Subject: [PATCH] Philippe 20/03/2017: IO: use IO_WRITE_FIELD for diachronic
 files

---
 src/MNH/menu_diachro.f90  |  36 +++--
 src/MNH/write_diachro.f90 | 309 +++++++++++++++++++-------------------
 2 files changed, 182 insertions(+), 163 deletions(-)

diff --git a/src/MNH/menu_diachro.f90 b/src/MNH/menu_diachro.f90
index d58d2c323..c508e80bc 100644
--- a/src/MNH/menu_diachro.f90
+++ b/src/MNH/menu_diachro.f90
@@ -57,10 +57,12 @@
 !*       0.    DECLARATIONS
 !              ------------
 !
+USE MODD_CONF
 USE MODD_IO_ll, ONLY: TFILEDATA
+!
+USE MODE_FIELD
 USE MODE_FMREAD
 USE MODE_FMWRIT
-USE MODD_CONF
 !
 IMPLICIT NONE
 !
@@ -84,6 +86,7 @@ INTEGER   ::   IRESPDIA
 INTEGER,SAVE   ::   IGROUP=0
 INTEGER,DIMENSION(:),ALLOCATABLE :: ITABCHAR
 LOGICAL   ::   GPACK
+TYPE(TFIELDDATA)  :: TZFIELD
 !------------------------------------------------------------------------------
 !
 YFILEDIA = TPDIAFILE%CNAME
@@ -99,22 +102,37 @@ IF(HGROUP == 'END')THEN
     LPACK=GPACK
     RETURN
   ENDIF
-  IGRID=0
   ILENG=16*IGROUP
-  ILENCH=LEN(YCOMMENT)
-  YRECFM='MENU_BUDGET.DIM'
-  CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',ILENG,&
-  IGRID,ILENCH,YCOMMENT,IRESPDIA)
 
-  YRECFM='MENU_BUDGET'
+  TZFIELD%CMNHNAME   = 'MENU_BUDGET.DIM'
+  TZFIELD%CSTDNAME   = ''
+  TZFIELD%CLONGNAME  = 'MesoNH: MENU_BUDGET.DIM'
+  TZFIELD%CUNITS     = ''
+  TZFIELD%CDIR       = '--'
+  TZFIELD%CCOMMENT   = TRIM(YCOMMENT)
+  TZFIELD%NGRID      = 0
+  TZFIELD%NTYPE      = TYPEINT
+  TZFIELD%NDIMS      = 0
+  CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,HLUOUTDIA,IRESPDIA,ILENG)
+
   ALLOCATE(ITABCHAR(ILENG))
   DO JJ=1,IGROUP
     DO J = 1,16
       ITABCHAR(16*(JJ-1)+J) = ICHAR(YGROUP(JJ)(J:J))
     ENDDO
   ENDDO
-  CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',ITABCHAR, &
-  IGRID,ILENCH,YCOMMENT,IRESPDIA)
+
+  TZFIELD%CMNHNAME   = 'MENU_BUDGET'
+  TZFIELD%CSTDNAME   = ''
+  TZFIELD%CLONGNAME  = 'MesoNH: MENU_BUDGET'
+  TZFIELD%CUNITS     = ''
+  TZFIELD%CDIR       = '--'
+  TZFIELD%CCOMMENT   = TRIM(YCOMMENT)
+  TZFIELD%NGRID      = 0
+  TZFIELD%NTYPE      = TYPEINT
+  TZFIELD%NDIMS      = 1
+  CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,HLUOUTDIA,IRESPDIA,ITABCHAR)
+
   DEALLOCATE(ITABCHAR)
 
 ELSE IF(HGROUP == 'READ')THEN
diff --git a/src/MNH/write_diachro.f90 b/src/MNH/write_diachro.f90
index b1c8404f1..27df2eec3 100644
--- a/src/MNH/write_diachro.f90
+++ b/src/MNH/write_diachro.f90
@@ -75,16 +75,18 @@
 !*       0.    DECLARATIONS
 !              ------------
 !
+USE MODD_BUDGET
+USE MODD_CONF
+USE MODE_FIELD
+USE MODD_IO_ll,      ONLY : TFILEDATA
+USE MODD_PARAMETERS, ONLY : JPHEXT
+!
 USE MODE_ll
 USE MODE_FM
 USE MODE_FMWRIT
 USE MODE_IO_ll
 !
 USE MODI_MENU_DIACHRO
-USE MODD_PARAMETERS, ONLY : JPHEXT
-USE MODD_CONF
-USE MODD_BUDGET
-USE MODD_IO_ll, ONLY: TFILEDATA
 !
 IMPLICIT NONE
 !
@@ -109,11 +111,9 @@ REAL,DIMENSION(:,:,:,:,:,:),  INTENT(IN),OPTIONAL :: PMASK
 !
 !*       0.1   Local variables
 !              ---------------
-CHARACTER(LEN=16) :: YRECFM
-CHARACTER(LEN=28) :: YFILEDIA
 CHARACTER(LEN=20) :: YCOMMENT
 CHARACTER(LEN=3)  :: YJ
-INTEGER   ::   ILENG, ILENCH, ILENTITRE, ILENUNITE, ILENCOMMENT, ILE, IRESP
+INTEGER   ::   ILENG, ILENTITRE, ILENUNITE, ILENCOMMENT, IRESP
 INTEGER   ::   ILUOUTDIA, IRESPDIA,INPRARDIA,IFTYPEDIA,IVERBDIA,ININARDIA
 INTEGER   ::   II, IJ, IK, IT, IN, IP, INUM, J, JJ
 INTEGER   ::   INTRAJT, IKTRAJX, IKTRAJY, IKTRAJZ
@@ -124,14 +124,12 @@ INTEGER   ::   ICOMPX, ICOMPY, ICOMPZ
 INTEGER   ::   IIMAX_ll, IJMAX_ll ! size of the physical global domain
 INTEGER,DIMENSION(:),ALLOCATABLE :: ITABCHAR
 LOGICAL   ::   GPACK
+TYPE(TFIELDDATA)  :: TZFIELD
 !------------------------------------------------------------------------------
 !
-YFILEDIA = TPDIAFILE%CNAME
-!
 GPACK=LPACK
 LPACK=.FALSE.
 YCOMMENT='NOTHING'
-ILENCH = LEN(YCOMMENT)
 !
 ! BUG ...ca passe que si PRESENT(OICP) sinon OICP non defini 
 ! Question: doit-on mettre condition comme:
@@ -225,45 +223,43 @@ IF(IRESP == -54)THEN
   IFTYPEDIA = 0; IVERBDIA = 5
 ENDIF
 !
-CALL FMLOOK_ll(ADJUSTL(ADJUSTR(YFILEDIA)//'.lfi'),HLUOUTDIA,INUM,IRESPDIA)
+CALL FMLOOK_ll(TRIM(TPDIAFILE%CNAME)//'.lfi',HLUOUTDIA,INUM,IRESPDIA)
 IF (NVERB>=5) THEN
-  WRITE(ILUOUTDIA,*)' WRITE_DIACHRO: ',TRIM(ADJUSTL(ADJUSTR(YFILEDIA)//'.lfi')),' IRESPDIA=',IRESPDIA
+  WRITE(ILUOUTDIA,*)' WRITE_DIACHRO: ',TRIM(TPDIAFILE%CNAME)//'.lfi',' IRESPDIA=',IRESPDIA
 ENDIF
 IF(IRESPDIA == -54)THEN
-  CALL FMOPEN_ll(YFILEDIA,'WRITE',HLUOUTDIA,INPRARDIA,IFTYPEDIA,IVERBDIA, &
+  CALL FMOPEN_ll(TPDIAFILE%CNAME,'WRITE',HLUOUTDIA,INPRARDIA,IFTYPEDIA,IVERBDIA, &
   ININARDIA,IRESPDIA)
 ENDIF
 !
 ! 1er enregistrement TYPE
 !
-YRECFM = ADJUSTL(ADJUSTR(HGROUP)//'.TYPE')
-
-#if defined(MNH_IOCDF4)
-
-CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',  &
-            HTYPE,KGRID(1),ILENCH,YCOMMENT,IRESPDIA)
-
-#else
-
-ILENG = LEN(HTYPE)
-ALLOCATE(ITABCHAR(ILENG))
-DO J = 1,ILENG
-  ITABCHAR(J) = ICHAR(HTYPE(J:J))
-ENDDO
-!print *,SIZE(ITABCHAR),'  ITABCHAR ',ITABCHAR,' KGRID ',KGRID,HLUOUTDIA,YFILEDIA
-CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',  &
-            ITABCHAR,KGRID(1),ILENCH,YCOMMENT,IRESPDIA)
-DEALLOCATE(ITABCHAR)
-
-#endif
+TZFIELD%CMNHNAME   = TRIM(HGROUP)//'.TYPE'
+TZFIELD%CSTDNAME   = ''
+TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(HGROUP)//'.TYPE'
+TZFIELD%CUNITS     = ''
+TZFIELD%CDIR       = '--'
+TZFIELD%CCOMMENT   = TRIM(YCOMMENT)
+TZFIELD%NGRID      = KGRID(1)
+TZFIELD%NTYPE      = TYPECHAR
+TZFIELD%NDIMS      = 0
+CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,HLUOUTDIA,IRESPDIA,HTYPE)
 
 IF (NVERB>=5) THEN
-  WRITE(ILUOUTDIA,*)'  1st ENREGISTREMENT(',TRIM(YRECFM),'): OK'
+  WRITE(ILUOUTDIA,*)'  1st record (',TRIM(TZFIELD%CMNHNAME),'): OK'
 ENDIF
 !
 ! 2eme  enregistrement DIMENSIONS des MATRICES et LONGUEUR des TABLEAUX de CARACTERES et FLAGS de COMPRESSION sur les DIFFERENTS AXES
 !
-YRECFM = ADJUSTL(ADJUSTR(HGROUP)//'.DIM')
+TZFIELD%CMNHNAME   = TRIM(HGROUP)//'.DIM'
+TZFIELD%CSTDNAME   = ''
+TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(HGROUP)//'.DIM'
+TZFIELD%CUNITS     = ''
+TZFIELD%CDIR       = '--'
+TZFIELD%CCOMMENT   = TRIM(YCOMMENT)
+TZFIELD%NGRID      = KGRID(1)
+TZFIELD%NTYPE      = TYPEINT
+TZFIELD%NDIMS      = 1
 SELECT CASE(HTYPE)
   CASE('CART','MASK','SPXY')
     ILENG = 34
@@ -290,8 +286,7 @@ SELECT CASE(HTYPE)
     ITABCHAR(29)=IIMASK; ITABCHAR(30)=IJMASK
     ITABCHAR(31)=IKMASK; ITABCHAR(32)=ITMASK
     ITABCHAR(33)=INMASK; ITABCHAR(34)=IPMASK
-    CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',ITABCHAR, &
-                KGRID(1),ILENCH,YCOMMENT,IRESPDIA)
+    CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,HLUOUTDIA,IRESPDIA,ITABCHAR)
     DEALLOCATE(ITABCHAR)
     IF (NVERB>=5) THEN
       WRITE(ILUOUTDIA,*)' ILENTITRE,ILENUNITE,ILENCOMMENT ',ILENTITRE,ILENUNITE,ILENCOMMENT
@@ -312,108 +307,62 @@ SELECT CASE(HTYPE)
     ITABCHAR(20)=IIMASK; ITABCHAR(21)=IJMASK
     ITABCHAR(22)=IKMASK; ITABCHAR(23)=ITMASK
     ITABCHAR(24)=INMASK; ITABCHAR(25)=IPMASK
-!   CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',ILENTITRE,ILENUNITE, &
-!   ILENCOMMENT,II,IJ,IK,IT,IN,IP,KGRID(1),ILENCH,YCOMMENT,IRESPDIA)
-    CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',ITABCHAR, &
-    KGRID(1),ILENCH,YCOMMENT,IRESPDIA)
+    CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,HLUOUTDIA,IRESPDIA,ITABCHAR)
     DEALLOCATE(ITABCHAR)
 END SELECT
 IF (NVERB>=5) THEN
-  WRITE(ILUOUTDIA,*)'  2nd ENREGISTREMENT(',TRIM(YRECFM),'): OK'
+  WRITE(ILUOUTDIA,*)'  2nd record (',TRIM(TZFIELD%CMNHNAME),'): OK'
 ENDIF
 !
 ! 3eme enregistrement TITRE
 !
-YRECFM = ADJUSTL(ADJUSTR(HGROUP)//'.TITRE')
-#if defined(MNH_IOCDF4)
-
-CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',  &
-            HTITRE(1:IP),KGRID(1),ILENCH,YCOMMENT,IRESPDIA)
-
-#else
-
-ILE = LEN(HTITRE)
-ILENG = ILE*IP
-ALLOCATE(ITABCHAR(ILENG))
-DO JJ = 1,IP
-  DO J = 1,ILE
-    ITABCHAR(ILE*(JJ-1)+J) = ICHAR(HTITRE(JJ)(J:J))
-  ENDDO
-  IF (NVERB>=5) THEN
-    WRITE(ILUOUTDIA,*)JJ,TRIM(HTITRE(JJ))
-  ENDIF
-ENDDO
-CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',  &
-            ITABCHAR,KGRID(1),ILENCH,YCOMMENT,IRESPDIA)
-DEALLOCATE(ITABCHAR)
-
-#endif
+TZFIELD%CMNHNAME   = TRIM(HGROUP)//'.TITRE'
+TZFIELD%CSTDNAME   = ''
+TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(HGROUP)//'.TITRE'
+TZFIELD%CUNITS     = ''
+TZFIELD%CDIR       = '--'
+TZFIELD%CCOMMENT   = TRIM(YCOMMENT)
+TZFIELD%NGRID      = KGRID(1)
+TZFIELD%NTYPE      = TYPECHAR
+TZFIELD%NDIMS      = 1
+CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,HLUOUTDIA,IRESPDIA,HTITRE(1:IP))
 
 IF (NVERB>=5) THEN
-  WRITE(ILUOUTDIA,*)'  3rd ENREGISTREMENT(',TRIM(YRECFM),'): OK'
+  WRITE(ILUOUTDIA,*)'  3rd record (',TRIM(TZFIELD%CMNHNAME),'): OK'
 ENDIF
 !
 ! 4eme enregistrement UNITE
 !
-YRECFM = ADJUSTL(ADJUSTR(HGROUP)//'.UNITE')
-#if defined(MNH_IOCDF4)
-
-CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',  &
-            HUNITE(1:IP),KGRID(1),ILENCH,YCOMMENT,IRESPDIA)
-
-#else
-
-ILE = LEN(HUNITE)
-ILENG = ILE*IP
-ALLOCATE(ITABCHAR(ILENG))
-DO JJ = 1,IP
-  DO J = 1,ILE
-    ITABCHAR(ILE*(JJ-1)+J) = ICHAR(HUNITE(JJ)(J:J))
-  ENDDO
-  IF (NVERB>=5) THEN
-    WRITE(ILUOUTDIA,*)JJ,TRIM(HUNITE(JJ))
-  ENDIF
-ENDDO
-CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',  &
-            ITABCHAR,KGRID(1),ILENCH,YCOMMENT,IRESPDIA)
-DEALLOCATE(ITABCHAR)
-
-#endif
+TZFIELD%CMNHNAME   = TRIM(HGROUP)//'.UNITE'
+TZFIELD%CSTDNAME   = ''
+TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(HGROUP)//'.UNITE'
+TZFIELD%CUNITS     = ''
+TZFIELD%CDIR       = '--'
+TZFIELD%CCOMMENT   = TRIM(YCOMMENT)
+TZFIELD%NGRID      = KGRID(1)
+TZFIELD%NTYPE      = TYPECHAR
+TZFIELD%NDIMS      = 1
+CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,HLUOUTDIA,IRESPDIA,HUNITE(1:IP))
 
 IF (NVERB>=5) THEN
-  WRITE(ILUOUTDIA,*)'  4th ENREGISTREMENT(',TRIM(YRECFM),'): OK'
+  WRITE(ILUOUTDIA,*)'  4th record (',TRIM(TZFIELD%CMNHNAME),'): OK'
 ENDIF
 !
 ! 5eme enregistrement COMMENT
 !
-YRECFM = ADJUSTL(ADJUSTR(HGROUP)//'.COMMENT')
-
-#if defined(MNH_IOCDF4)
-
-CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',  &
-            HCOMMENT(1:IP),KGRID(1),ILENCH,YCOMMENT,IRESPDIA)
-
-#else
-
-ILE = LEN(HCOMMENT)
-ILENG = ILE*IP
-ALLOCATE(ITABCHAR(ILENG))
-DO JJ = 1,IP
-  DO J = 1,ILE
-    ITABCHAR(ILE*(JJ-1)+J) = ICHAR(HCOMMENT(JJ)(J:J))
-  ENDDO
-  IF (NVERB>=5) THEN
-    WRITE(ILUOUTDIA,*)JJ,TRIM(HCOMMENT(JJ))
-  ENDIF
-ENDDO
-CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',  &
-            ITABCHAR,KGRID(1),ILENCH,YCOMMENT,IRESPDIA)
-DEALLOCATE(ITABCHAR)
-
-#endif
+TZFIELD%CMNHNAME   = TRIM(HGROUP)//'.COMMENT'
+TZFIELD%CSTDNAME   = ''
+TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(HGROUP)//'.COMMENT'
+TZFIELD%CUNITS     = ''
+TZFIELD%CDIR       = '--'
+TZFIELD%CCOMMENT   = TRIM(YCOMMENT)
+TZFIELD%NGRID      = KGRID(1)
+TZFIELD%NTYPE      = TYPECHAR
+TZFIELD%NDIMS      = 1
+CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,HLUOUTDIA,IRESPDIA,HCOMMENT(1:IP))
 
 IF (NVERB>=5) THEN
-  WRITE(ILUOUTDIA,*)'  5th ENREGISTREMENT(',TRIM(YRECFM),'): OK'
+  WRITE(ILUOUTDIA,*)'  5th record (',TRIM(TZFIELD%CMNHNAME),'): OK'
 ENDIF
 !
 ! 6eme enregistrement PVAR
@@ -431,39 +380,59 @@ DO J = 1,IP
   ELSE IF(J >= 100 .AND. J < 1000) THEN 
           WRITE(YJ,'(I3)')J
   ENDIF
-  YRECFM = ADJUSTL(ADJUSTR(HGROUP)//'.PROC'//YJ)
-  ILENG = II*IJ*IK*IT*IN
-!print *,' PVAR '
-!print *,' YJ ILENG YRECFM KGRID(J) ',YJ,ILENG,YRECFM,KGRID(J)
+  TZFIELD%CMNHNAME   = TRIM(HGROUP)//'.PROC'//YJ
 ! 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(YFILEDIA,YRECFM,HLUOUTDIA,'BUDGET',PVAR(:,:,:,:,:,J),KGRID(J), &
+    CALL FMWRITBOX(TPDIAFILE%CNAME,TZFIELD%CMNHNAME,HLUOUTDIA,'BUDGET',PVAR(:,:,:,:,:,J),KGRID(J), &
                    HTITRE(J),KIL+JPHEXT,KIH+JPHEXT,KJL+JPHEXT,KJH+JPHEXT,IRESPDIA)
   ELSE
-    CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',PVAR(:,:,:,:,:,J),KGRID(J),   &
-                LEN(HTITRE(J)),HTITRE(J),IRESPDIA)
+    TZFIELD%CMNHNAME   = TRIM(HGROUP)//'.PROC'//YJ
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(HGROUP)//'.PROC'//YJ
+    TZFIELD%CUNITS     = ''
+    TZFIELD%CDIR       = '--'
+    TZFIELD%CCOMMENT   = TRIM(HTITRE(J))
+    TZFIELD%NGRID      = KGRID(J)
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 5
+    CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,HLUOUTDIA,IRESPDIA,PVAR(:,:,:,:,:,J))
   ENDIF
 ELSE
-  CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',PVAR(:,:,:,:,:,J),KGRID(J),   &
-                LEN(HTITRE(J)),HTITRE(J),IRESPDIA)
+  TZFIELD%CMNHNAME   = TRIM(HGROUP)//'.PROC'//YJ
+  TZFIELD%CSTDNAME   = ''
+  TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(HGROUP)//'.PROC'//YJ
+  TZFIELD%CUNITS     = ''
+  TZFIELD%CDIR       = '--'
+  TZFIELD%CCOMMENT   = TRIM(HTITRE(J))
+  TZFIELD%NGRID      = KGRID(J)
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 5
+  CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,HLUOUTDIA,IRESPDIA,PVAR(:,:,:,:,:,J))
 END IF
   IF (NVERB>=5) THEN
-    WRITE(ILUOUTDIA,*)J,TRIM(YRECFM)
+    WRITE(ILUOUTDIA,*)J,TRIM(TZFIELD%CMNHNAME)
   ENDIF
 ENDDO
 IF (NVERB>=5) THEN
-  WRITE(ILUOUTDIA,*)'  6th ENREGISTREMENT: OK'
+  WRITE(ILUOUTDIA,*)'  6th record: OK'
 ENDIF
 !
 ! 7eme enregistrement TRAJT
 !
-YRECFM = ADJUSTL(ADJUSTR(HGROUP)//'.TRAJT')
-ILENG = IT*INTRAJT
-CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',  &
-            PTRAJT,KGRID(1),ILENCH,YCOMMENT,IRESPDIA)
+TZFIELD%CMNHNAME   = TRIM(HGROUP)//'.TRAJT'
+TZFIELD%CSTDNAME   = ''
+TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(HGROUP)//'.TRAJT'
+TZFIELD%CUNITS     = ''
+TZFIELD%CDIR       = '--'
+TZFIELD%CCOMMENT   = TRIM(YCOMMENT)
+TZFIELD%NGRID      = KGRID(1)
+TZFIELD%NTYPE      = TYPEREAL
+TZFIELD%NDIMS      = 2
+CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,HLUOUTDIA,IRESPDIA,PTRAJT)
+
 IF (NVERB>=5) THEN
-  WRITE(ILUOUTDIA,*)'  7th ENREGISTREMENT(',TRIM(YRECFM),'): OK'
+  WRITE(ILUOUTDIA,*)'  7th record (',TRIM(TZFIELD%CMNHNAME),'): OK'
 ENDIF
 !
 ! Dans certains cas
@@ -472,45 +441,77 @@ ENDIF
 ! 8eme enregistrement TRAJX
 !
 IF(PRESENT(PTRAJX))THEN
-  YRECFM = ADJUSTL(ADJUSTR(HGROUP)//'.TRAJX')
-  ILENG = IKTRAJX*ITTRAJX*INTRAJX
-  CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',  &
-              PTRAJX,KGRID(1),ILENCH,YCOMMENT,IRESPDIA)
+  TZFIELD%CMNHNAME   = TRIM(HGROUP)//'.TRAJX'
+  TZFIELD%CSTDNAME   = ''
+  TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(HGROUP)//'.TRAJX'
+  TZFIELD%CUNITS     = ''
+  TZFIELD%CDIR       = '--'
+  TZFIELD%CCOMMENT   = TRIM(YCOMMENT)
+  TZFIELD%NGRID      = KGRID(1)
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 3
+  CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,HLUOUTDIA,IRESPDIA,PTRAJX)
 ENDIF
 !
 !                        ou
 !
 IF(PRESENT(PMASK))THEN
-  YRECFM = ADJUSTL(ADJUSTR(HGROUP)//'.MASK')
-  ILENG = IIMASK*IJMASK*IKMASK*ITMASK*INMASK*IPMASK
-  CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'XY',PMASK,KGRID(1),  &
-              ILENCH,YCOMMENT,IRESPDIA)
+  TZFIELD%CMNHNAME   = TRIM(HGROUP)//'.MASK'
+  TZFIELD%CSTDNAME   = ''
+  TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(HGROUP)//'.MASK'
+  TZFIELD%CUNITS     = ''
+  TZFIELD%CDIR       = 'XY'
+  TZFIELD%CCOMMENT   = TRIM(YCOMMENT)
+  TZFIELD%NGRID      = KGRID(1)
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 6
+  !PW: not yet implemented CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,HLUOUTDIA,IRESPDIA,PMASK)
+  CALL FMWRIT(TPDIAFILE%CNAME,TZFIELD%CMNHNAME,HLUOUTDIA,'XY',PMASK,KGRID(1),  &
+              LEN_TRIM(YCOMMENT),YCOMMENT,IRESPDIA)
 ENDIF
 !
 ! 9eme enregistrement TRAJY
 !
 IF(PRESENT(PTRAJY))THEN
-  YRECFM = ADJUSTL(ADJUSTR(HGROUP)//'.TRAJY')
-  ILENG = IKTRAJY*ITTRAJY*INTRAJY
-  CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',  &
-              PTRAJY,KGRID(1),ILENCH,YCOMMENT,IRESPDIA)
+  TZFIELD%CMNHNAME   = TRIM(HGROUP)//'.TRAJY'
+  TZFIELD%CSTDNAME   = ''
+  TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(HGROUP)//'.TRAJY'
+  TZFIELD%CUNITS     = ''
+  TZFIELD%CDIR       = '--'
+  TZFIELD%CCOMMENT   = TRIM(YCOMMENT)
+  TZFIELD%NGRID      = KGRID(1)
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 3
+  CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,HLUOUTDIA,IRESPDIA,PTRAJY)
 ENDIF
 !
 ! 10eme enregistrement TRAJZ
 !
 IF(PRESENT(PTRAJZ))THEN
-  YRECFM = ADJUSTL(ADJUSTR(HGROUP)//'.TRAJZ')
-  ILENG = IKTRAJZ*ITTRAJZ*INTRAJZ
-  CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',  &
-              PTRAJZ,KGRID(1),ILENCH,YCOMMENT,IRESPDIA)
+  TZFIELD%CMNHNAME   = TRIM(HGROUP)//'.TRAJZ'
+  TZFIELD%CSTDNAME   = ''
+  TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(HGROUP)//'.TRAJZ'
+  TZFIELD%CUNITS     = ''
+  TZFIELD%CDIR       = '--'
+  TZFIELD%CCOMMENT   = TRIM(YCOMMENT)
+  TZFIELD%NGRID      = KGRID(1)
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 3
+  CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,HLUOUTDIA,IRESPDIA,PTRAJZ)
 ENDIF
 !
 ! 11eme enregistrement PDATIME
 !
-YRECFM = ADJUSTL(ADJUSTR(HGROUP)//'.DATIM')
-ILENG=16*IT
-CALL FMWRIT(YFILEDIA,YRECFM,HLUOUTDIA,'--',  &
-            PDATIME,KGRID(1),ILENCH,YCOMMENT,IRESPDIA)
+TZFIELD%CMNHNAME   = TRIM(HGROUP)//'.DATIM'
+TZFIELD%CSTDNAME   = ''
+TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(HGROUP)//'.DATIM'
+TZFIELD%CUNITS     = ''
+TZFIELD%CDIR       = '--'
+TZFIELD%CCOMMENT   = TRIM(YCOMMENT)
+TZFIELD%NGRID      = KGRID(1)
+TZFIELD%NTYPE      = TYPEREAL
+TZFIELD%NDIMS      = 2
+CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,HLUOUTDIA,IRESPDIA,PDATIME)
 !
 CALL MENU_DIACHRO(TPDIAFILE,HLUOUTDIA,HGROUP)
 LPACK=GPACK
-- 
GitLab