From e54464bdc287720b987de365d3aa55a5daea558a Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Thu, 28 Jun 2018 15:38:37 +0200 Subject: [PATCH] Philippe 28/06/2018: IO: if a file is not found in the requested fileformat, try the other one (LFI or NetCDF) --- src/LIB/SURCOUCHE/src/fmread_ll.f90 | 2 +- src/LIB/SURCOUCHE/src/fmwrit_ll.f90 | 2 +- src/LIB/SURCOUCHE/src/mode_fm.f90 | 53 ++++++++++++++++++++++++++++- src/LIB/SURCOUCHE/src/mode_io.f90 | 2 +- 4 files changed, 55 insertions(+), 4 deletions(-) diff --git a/src/LIB/SURCOUCHE/src/fmread_ll.f90 b/src/LIB/SURCOUCHE/src/fmread_ll.f90 index 1634d65b0..bb4846cfc 100644 --- a/src/LIB/SURCOUCHE/src/fmread_ll.f90 +++ b/src/LIB/SURCOUCHE/src/fmread_ll.f90 @@ -83,7 +83,7 @@ IF (TPFILE%CMODE/='READ') THEN END IF ! !Check fileformat -IF (TPFILE%CFORMAT/='NETCDF4' .AND. TPFILE%CFORMAT=='LFI' .AND. TPFILE%CFORMAT=='LFICDF4') THEN +IF (TPFILE%CFORMAT/='NETCDF4' .AND. TPFILE%CFORMAT/='LFI' .AND. TPFILE%CFORMAT/='LFICDF4') THEN CALL PRINT_MSG(NVERB_FATAL,'IO',HSUBR,& TRIM(TPFILE%CNAME)//': invalid fileformat ('//TRIM(TPFILE%CFORMAT)//')') KRESP = -202 diff --git a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 index 0f1086541..3c96575e5 100644 --- a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 +++ b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 @@ -278,7 +278,7 @@ CONTAINS END IF ! !Check fileformat - IF (TPFILE%CFORMAT/='NETCDF4' .AND. TPFILE%CFORMAT=='LFI' .AND. TPFILE%CFORMAT=='LFICDF4') THEN + IF (TPFILE%CFORMAT/='NETCDF4' .AND. TPFILE%CFORMAT/='LFI' .AND. TPFILE%CFORMAT/='LFICDF4') THEN CALL PRINT_MSG(NVERB_FATAL,'IO',HSUBR,& TRIM(TPFILE%CNAME)//': invalid fileformat ('//TRIM(TPFILE%CFORMAT)//')') KRESP = -202 diff --git a/src/LIB/SURCOUCHE/src/mode_fm.f90 b/src/LIB/SURCOUCHE/src/mode_fm.f90 index b95852bfa..1fd027c41 100644 --- a/src/LIB/SURCOUCHE/src/mode_fm.f90 +++ b/src/LIB/SURCOUCHE/src/mode_fm.f90 @@ -220,7 +220,7 @@ END SUBROUTINE IO_FILE_OPEN_ll SUBROUTINE FMOPEN_ll(TPFILE,KRESP,OPARALLELIO,HPROGRAM_ORIG) USE MODD_IO_ll, ONLY : ISTDOUT,TFILEDATA -USE MODE_IO_ll, ONLY : OPEN_ll,GCONFIO +USE MODE_IO_ll, ONLY : OPEN_ll,GCONFIO,IOFREEFLU,IONEWFLU !JUANZ USE MODD_CONFZ,ONLY : NB_PROCIO_R,NB_PROCIO_W !JUANZ @@ -252,6 +252,7 @@ LOGICAL :: GNAMFI8,GFATER8,GSTATS8 INTEGER :: INB_PROCIO !JUAN LOGICAL :: GPARALLELIO +LOGICAL :: GEXIST_LFI, GEXIST_NC4 #if defined(MNH_IOCDF4) INTEGER(KIND=IDCDF_KIND) :: INCERR #endif @@ -322,6 +323,56 @@ IF (IRESP /= 0) GOTO 1000 IF (TPFILE%LMASTER) THEN ! Proc I/O case + INQUIRE(FILE=TRIM(TPFILE%CNAME)//'.lfi',EXIST=GEXIST_LFI) + INQUIRE(FILE=TRIM(TPFILE%CNAME)//'.nc',EXIST=GEXIST_NC4) + + IF (YACTION == 'READ') THEN + IF (.NOT.GEXIST_LFI .AND. .NOT.GEXIST_NC4) & + CALL PRINT_MSG(NVERB_FATAL,'IO','FMOPEN_ll',TRIM(TPFILE%CNAME)//': no .nc or .lfi file') + + SELECT CASE (TRIM(TPFILE%CFORMAT)) + CASE ('NETCDF4') + IF (.NOT.GEXIST_NC4 .AND. GEXIST_LFI) THEN + CALL PRINT_MSG(NVERB_WARNING,'IO','FMOPEN_ll',TRIM(TPFILE%CNAME)// & + ': .nc file does not exist but .lfi exists -> forced to LFI') + TPFILE%CFORMAT='LFI' + TPFILE%NLFIFLU = IONEWFLU() + END IF + CASE ('LFI') + IF (.NOT.GEXIST_LFI .AND. GEXIST_NC4) THEN + CALL PRINT_MSG(NVERB_WARNING,'IO','FMOPEN_ll',TRIM(TPFILE%CNAME)// & + ': .lfi file does not exist but .nc exists -> forced to NETCDF4') + TPFILE%CFORMAT='NETCDF4' + CALL IOFREEFLU(INT(TPFILE%NLFIFLU)) + TPFILE%NLFIFLU = -1 + END IF + CASE ('LFICDF4') + IF (GEXIST_NC4) THEN + CALL PRINT_MSG(NVERB_WARNING,'IO','FMOPEN_ll',TRIM(TPFILE%CNAME)// & + ': LFICDF4 format is not allowed in READ mode -> forced to NETCDF4') + TPFILE%CFORMAT='NETCDF4' + IF (TPFILE%NLFIFLU>0) CALL IOFREEFLU(INT(TPFILE%NLFIFLU)) + TPFILE%NLFIFLU = -1 + ELSE IF (GEXIST_LFI) THEN + CALL PRINT_MSG(NVERB_WARNING,'IO','FMOPEN_ll',TRIM(TPFILE%CNAME)// & + ': LFICDF4 format is not allowed in READ mode -> forced to LFI') + TPFILE%CFORMAT='LFI' + TPFILE%NLFIFLU = IONEWFLU() + END IF + CASE DEFAULT + IF (GEXIST_NC4) THEN + CALL PRINT_MSG(NVERB_ERROR,'IO','FMOPEN_ll',TRIM(TPFILE%CNAME)// & + ': invalid fileformat (-> forced to NETCDF4 if no abort)') + TPFILE%CFORMAT='NETCDF4' + ELSE IF (GEXIST_LFI) THEN + CALL PRINT_MSG(NVERB_ERROR,'IO','FMOPEN_ll',TRIM(TPFILE%CNAME)// & + ': invalid fileformat (-> forced to LFI if no abort)') + TPFILE%CFORMAT='LFI' + TPFILE%NLFIFLU = IONEWFLU() + END IF + END SELECT + END IF + #if defined(MNH_IOCDF4) IF (TPFILE%CFORMAT=='NETCDF4' .OR. TPFILE%CFORMAT=='LFICDF4') THEN IF (YACTION == 'READ') THEN diff --git a/src/LIB/SURCOUCHE/src/mode_io.f90 b/src/LIB/SURCOUCHE/src/mode_io.f90 index 079ac5d30..6e7dd4552 100644 --- a/src/LIB/SURCOUCHE/src/mode_io.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io.f90 @@ -40,7 +40,7 @@ MODULE MODE_IO_ll ! LOGICAL,SAVE :: GCONFIO = .FALSE. ! Turn TRUE when SET_CONFIO_ll is called. - PUBLIC IONEWFLU,UPCASE,INITIO_ll,OPEN_ll,CLOSE_ll + PUBLIC IOFREEFLU,IONEWFLU,UPCASE,INITIO_ll,OPEN_ll,CLOSE_ll PUBLIC SET_CONFIO_ll,GCONFIO PUBLIC io_file,IO_RANK -- GitLab