From 1dada6e057d6e369bda6b8f4744ddb78a7d6b888 Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Fri, 18 Aug 2017 15:10:36 +0200 Subject: [PATCH] Philippe 18/08/2017: IO: IO_FILE_ADD2LIST manage the case in which a file is already in the filelist (with an optional argument) --- .../SURCOUCHE/src/mode_io_manage_struct.f90 | 46 +++++++++++++------ 1 file changed, 33 insertions(+), 13 deletions(-) diff --git a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 index af5188262..c1569453a 100644 --- a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 @@ -572,33 +572,53 @@ END SUBROUTINE POPULATE_STRUCT ! END SUBROUTINE IO_PREPARE_BAKOUT_STRUCT ! -SUBROUTINE IO_FILE_ADD2LIST(TPFILE,HNAME,HTYPE,HMODE,KLFINPRAR,KLFITYPE,KLFIVERB,TPDADFILE) +SUBROUTINE IO_FILE_ADD2LIST(TPFILE,HNAME,HTYPE,HMODE,KLFINPRAR,KLFITYPE,KLFIVERB,TPDADFILE,OOLD) ! USE MODD_FMOUT, ONLY : LOUT_COMPRESS,LOUT_REDUCE_FLOAT_PRECISION,NOUT_COMPRESS_LEVEL USE MODE_MODELN_HANDLER, ONLY : GET_CURRENT_MODEL_INDEX ! -TYPE(TFILEDATA),POINTER, INTENT(OUT) :: TPFILE !File structure to return -CHARACTER(LEN=*), INTENT(IN) :: HNAME !Filename -CHARACTER(LEN=*), INTENT(IN) :: HTYPE !Filetype (backup, output, prepidealcase...) -CHARACTER(LEN=*), INTENT(IN) :: HMODE !Opening mode (read, write...) -INTEGER, OPTIONAL,INTENT(IN) :: KLFINPRAR !Number of predicted articles of the LFI file (non crucial) -INTEGER, OPTIONAL,INTENT(IN) :: KLFITYPE !Type of the file (used to generate list of files to transfers) -INTEGER, OPTIONAL,INTENT(IN) :: KLFIVERB !LFI verbosity level -TYPE(TFILEDATA),POINTER,OPTIONAL,INTENT(IN) :: TPDADFILE !Corresponding dad file +TYPE(TFILEDATA),POINTER, INTENT(INOUT) :: TPFILE !File structure to return +CHARACTER(LEN=*), INTENT(IN) :: HNAME !Filename +CHARACTER(LEN=*), INTENT(IN) :: HTYPE !Filetype (backup, output, prepidealcase...) +CHARACTER(LEN=*), INTENT(IN) :: HMODE !Opening mode (read, write...) +INTEGER, OPTIONAL,INTENT(IN) :: KLFINPRAR !Number of predicted articles of the LFI file (non crucial) +INTEGER, OPTIONAL,INTENT(IN) :: KLFITYPE !Type of the file (used to generate list of files to transfers) +INTEGER, OPTIONAL,INTENT(IN) :: KLFIVERB !LFI verbosity level +TYPE(TFILEDATA),POINTER,OPTIONAL,INTENT(IN) :: TPDADFILE !Corresponding dad file +LOGICAL, OPTIONAL,INTENT(IN) :: OOLD !FALSE if new file (should not be found) + !TRUE if the file could already be in the list + ! (add it only if not yet present) ! INTEGER :: IMI,IRESP INTEGER :: ILFINPRAR INTEGER :: ILFITYPE INTEGER :: ILFIVERB -TYPE(TFILEDATA),POINTER :: TZFILE_DUMMY +LOGICAL :: GOLD ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FILE_ADD2LIST','called for '//TRIM(HNAME)) ! -IF (ASSOCIATED(TPFILE)) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_FILE_ADD2LIST','file '//TRIM(HNAME)//' already associated') +IF (PRESENT(OOLD)) THEN + GOLD = OOLD +ELSE + GOLD = .FALSE. !By default, we assume file is not yet in list +END IF +! +IF (ASSOCIATED(TPFILE)) THEN + IF (GOLD) THEN + CALL PRINT_MSG(NVERB_INFO,'IO','IO_FILE_ADD2LIST','file '//TRIM(HNAME)//' already associated. Pointer will be overwritten') + TPFILE => NULL() + ELSE + CALL PRINT_MSG(NVERB_FATAL,'IO','IO_FILE_ADD2LIST','file '//TRIM(HNAME)//' already associated') + END IF +END IF ! -CALL IO_FILE_FIND_BYNAME(HNAME,TZFILE_DUMMY,IRESP,OOLD=.FALSE.) +CALL IO_FILE_FIND_BYNAME(HNAME,TPFILE,IRESP,OOLD=GOLD) IF (IRESP==0) THEN - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','file '//TRIM(HNAME)//' already in filelist') + IF (.NOT.GOLD) THEN + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','file '//TRIM(HNAME)//' already in filelist') + ELSE + CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FILE_ADD2LIST','file '//TRIM(HNAME)//' already in filelist (not unexpected)') + END IF RETURN END IF ! -- GitLab