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