From 7581bc3a05526e939e9c76458664d9d1dccf0219 Mon Sep 17 00:00:00 2001
From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Date: Thu, 2 Feb 2023 15:41:52 +0100
Subject: [PATCH] Philippe 02/02/2023: LFI2CDF: correct merge of Z-split files

---
 LIBTOOLS/tools/lfi2cdf/src/mode_util.f90 | 77 ++++--------------------
 1 file changed, 13 insertions(+), 64 deletions(-)

diff --git a/LIBTOOLS/tools/lfi2cdf/src/mode_util.f90 b/LIBTOOLS/tools/lfi2cdf/src/mode_util.f90
index 7c4b22d80..80463b15e 100644
--- a/LIBTOOLS/tools/lfi2cdf/src/mode_util.f90
+++ b/LIBTOOLS/tools/lfi2cdf/src/mode_util.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2023 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -271,7 +271,7 @@ CONTAINS
 
        maxvar = nbvar_tbr+nbvar_calc
 DO ji=1,nbvar_tbr+nbvar_calc
-  print *,ji,'name=',trim(tpreclist(ji)%name),' calc=',tpreclist(ji)%calc,' tbw=',tpreclist(ji)%tbw,&
+  print *,ji,'name=',tpreclist(ji)%name,' calc=',tpreclist(ji)%calc,' tbw=',tpreclist(ji)%tbw,&
           ' tbr=',tpreclist(ji)%tbr,' found=',tpreclist(ji)%found
 END DO
 
@@ -411,11 +411,11 @@ END DO
         ELSE !Field not found in list, try to determine characteristics
           tpreclist(ji)%TFIELD%CMNHNAME = TRIM(tpreclist(ji)%name)
           tpreclist(ji)%TFIELD%CSTDNAME = ''
-          tpreclist(ji)%TFIELD%CLONGNAME = TRIM(tpreclist(ji)%name)
-          tpreclist(ji)%TFIELD%CUNITS = ''
+          !Set in IO_Metadata_get_nc4 (and not used for LFI) tpreclist(ji)%TFIELD%CLONGNAME = TRIM(tpreclist(ji)%name)
+          !Set in IO_Metadata_get_nc4 (and not used for LFI) tpreclist(ji)%TFIELD%CUNITS = ''
           tpreclist(ji)%TFIELD%CDIR = 'XY' !Assumption...
           tpreclist(ji)%TFIELD%CLBTYPE = 'NONE'
-          tpreclist(ji)%TFIELD%CCOMMENT = ''
+          !Set in IO_Metadata_get_nc4 (and not used for LFI) tpreclist(ji)%TFIELD%CCOMMENT = ''
           !
           IF (runmode==MODELFI2CDF) THEN
             tpreclist(ji)%TFIELD%NGRID = 1 !Assumption
@@ -1026,7 +1026,7 @@ END DO
        if ( options( OPTFALLBACK )%set ) then
          inb_procio_r_save = NB_PROCIO_R
          NB_PROCIO_R = 1
-         CALL IO_FILE_ADD2LIST(INFILES(2)%TFILE,options( OPTFALLBACK )%cvalue,'UNKNOWN','READ',HFORMAT='NETCDF4')
+         CALL IO_FILE_ADD2LIST(INFILES(2)%TFILE,options( OPTFALLBACK )%cvalue,'MNH','READ',HFORMAT='NETCDF4')
          CALL IO_FILE_OPEN(INFILES(2)%TFILE)
          NB_PROCIO_R = inb_procio_r_save
        end if
@@ -1396,7 +1396,7 @@ END DO
     IF (ISTATUS == NF90_NOERR) THEN
       GSPLIT_INFO_AVAILABLE = .TRUE.
 
-      IF (GSPLIT_AT_ENTRY) CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Metadata_get_nc4','split variable delcaration inside a split file')
+      IF (GSPLIT_AT_ENTRY) CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Metadata_get_nc4','split variable declaration inside a split file')
 
       ALLOCATE(CHARACTER(LEN=ILENG) :: YSPLIT)
       ISTATUS = NF90_GET_ATT(IFILE_ID, KVAR_ID, 'split_variable', YSPLIT)
@@ -1445,65 +1445,14 @@ END DO
       DEALLOCATE(YSPLIT)
     END IF
 
-    ISTATUS = NF90_GET_ATT(IFILE_ID,KVAR_ID,'grid',TPREC%NGRID_FILE)
-    !On MesoNH versions < 5.4.0, the grid number was stored in 'GRID' instead of 'grid'
-    IF (ISTATUS /= NF90_NOERR) ISTATUS = NF90_GET_ATT(IFILE_ID,KVAR_ID,'GRID',TPREC%NGRID_FILE)
-    IF (ISTATUS /= NF90_NOERR) TPREC%NGRID_FILE = 0
-
-    ISTATUS = NF90_GET_ATT(IFILE_ID,KVAR_ID,'units',TPREC%CUNITS_FILE)
-    IF (ISTATUS /= NF90_NOERR) TPREC%CUNITS_FILE = ''
-
-    !split_variable and other attributes were added in MesoNH > 5.4.2
-    ISTATUS = NF90_INQUIRE_ATTRIBUTE(IFILE_ID, KVAR_ID, 'split_variable', LEN=ILENG)
-    IF (ISTATUS == NF90_NOERR) THEN
-      IF (GSPLIT_AT_ENTRY) CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Metadata_get_nc4','split variable declaration inside a split file')
-
-      ALLOCATE(CHARACTER(LEN=ILENG) :: YSPLIT)
-      ISTATUS = NF90_GET_ATT(IFILE_ID, KVAR_ID, 'split_variable', YSPLIT)
-      IF (istatus /= NF90_NOERR) call IO_Err_handle_nc4( istatus, 'IO_Metadata_get_nc4', 'NF90_GET_ATT', 'split_variable' )
-      IF ( YSPLIT == 'yes' ) then
-        TPREC%LSPLIT = .true.
-
-        ISTATUS = NF90_GET_ATT(IFILE_ID, KVAR_ID, 'ndims', TPREC%NDIMS_FILE)
-        IF (istatus /= NF90_NOERR) CALL IO_Err_handle_nc4( istatus, 'IO_Metadata_get_nc4', 'NF90_GET_ATT', 'ndims' )
-        IF ( TPREC%NDIMS_FILE/=3 ) CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Metadata_get_nc4', &
-                                                  'split variable with ndims/=3 not supported')
-
-        ISTATUS = NF90_INQUIRE_ATTRIBUTE(IFILE_ID, KVAR_ID, 'time_dependent', LEN=ILENG)
-        IF (istatus /= NF90_NOERR) &
-          CALL IO_Err_handle_nc4( istatus, 'IO_Metadata_get_nc4', 'NF90_INQUIRE_ATTRIBUTE', 'time_dependent' )
-        ALLOCATE(CHARACTER(LEN=ILENG) :: YTIMEDEP)
-        ISTATUS = NF90_GET_ATT(IFILE_ID, KVAR_ID, 'time_dependent', YTIMEDEP)
-        IF (istatus /= NF90_NOERR) CALL IO_Err_handle_nc4( istatus, 'IO_Metadata_get_nc4', 'NF90_GET_ATT', 'time_dependent' )
-        IF ( YTIMEDEP == 'yes' ) then
-          TPREC%TFIELD%LTIMEDEP = .TRUE.
-        ELSE IF ( YTIMEDEP == 'no' ) THEN
-          TPREC%TFIELD%LTIMEDEP = .FALSE.
-        ELSE
-          CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Metadata_get_nc4','unknown value '//trim(YTIMEDEP)// &
-                                                                  ' for time_dependent attribute' )
-        END IF
-
-        ISTATUS = NF90_GET_ATT(IFILE_ID, KVAR_ID, 'split_nblocks', iblocks)
-        IF (istatus /= NF90_NOERR) CALL IO_Err_handle_nc4( istatus, 'IO_Metadata_get_nc4', 'NF90_GET_ATT', 'split_nblocks' )
-
-!PW: todo:check tfiles_ioz exist
-        IFILE_ID = TPFILE%TFILES_IOZ(1)%TFILE%NNCID
+    !Reset IFILE_ID to master file (if split files)
+    IFILE_ID = TPFILE%NNCID
 
-        istatus = NF90_INQ_VARID(IFILE_ID,trim(TPREC%NAME)//'0001',ivar_id)
-        IF (ISTATUS /= NF90_NOERR) &
-          CALL IO_Err_handle_nc4( istatus, 'IO_Metadata_get_nc4', 'NF90_INQ_VARID', trim(TPREC%NAME)//'0001' )
-        ISTATUS = NF90_INQUIRE_VARIABLE(IFILE_ID, IVAR_ID, DIMIDS = IDIMS_ID)
-        IF (ISTATUS /= NF90_NOERR) &
-          CALL IO_Err_handle_nc4( istatus, 'IO_Metadata_get_nc4', 'NF90_INQUIRE_VARIABLE', trim(TPREC%NAME)//'0001' )
+    ISTATUS = NF90_GET_ATT(IFILE_ID,KVAR_ID,'long_name',TPREC%TFIELD%CLONGNAME)
+    IF (ISTATUS /= NF90_NOERR) TPREC%TFIELD%CLONGNAME = TRIM( TPREC%TFIELD%CMNHNAME )
 
-        DEALLOCATE(YTIMEDEP)
-      ELSE IF ( YSPLIT /= 'no' ) THEN
-        CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Metadata_get_nc4','unknown value '//trim(YSPLIT)//' for split_variable attribute' )
-      END IF
-
-      DEALLOCATE(YSPLIT)
-    END IF
+    ISTATUS = NF90_GET_ATT(IFILE_ID,KVAR_ID,'comment',TPREC%TFIELD%CCOMMENT)
+    IF (ISTATUS /= NF90_NOERR) TPREC%TFIELD%CCOMMENT = ''
 
     ISTATUS = NF90_GET_ATT(IFILE_ID,KVAR_ID,'grid',TPREC%NGRID_FILE)
     !On MesoNH versions < 5.4.0, the grid number was stored in 'GRID' instead of 'grid'
-- 
GitLab