diff --git a/src/LIB/SURCOUCHE/src/modd_io.f90 b/src/LIB/SURCOUCHE/src/modd_io.f90 index 809e1e089c7290033999228bdea50976acdd0744..b0290eaad360fa48e23fe49d784211c64867805d 100644 --- a/src/LIB/SURCOUCHE/src/modd_io.f90 +++ b/src/LIB/SURCOUCHE/src/modd_io.f90 @@ -71,6 +71,7 @@ TYPE TFILEDATA CHARACTER(LEN=7) :: CFORMAT = "UNKNOWN" !Fileformat (NETCDF4, LFI...) CHARACTER(LEN=7) :: CMODE = "UNKNOWN" !Opening mode (read, write...) LOGICAL :: LOPENED = .FALSE. !Is the file opened + INTEGER :: NOPEN_CURRENT = 0 !Number of times the file is currently opened (several opens without close are allowed) INTEGER :: NOPEN = 0 !Number of times the file has been opened (during the current execution) INTEGER :: NCLOSE = 0 !Number of times the file has been closed (during the current execution) ! diff --git a/src/LIB/SURCOUCHE/src/mode_fm.f90 b/src/LIB/SURCOUCHE/src/mode_fm.f90 index 04104bcc10a87567f27b35d1aefbb897a7add68f..e3a7cf3e409871d76b372f2113fe72104786b7bf 100644 --- a/src/LIB/SURCOUCHE/src/mode_fm.f90 +++ b/src/LIB/SURCOUCHE/src/mode_fm.f90 @@ -138,25 +138,29 @@ USE MODD_IO_ll, ONLY: ISP,LIOCDF4,LLFIOUT,LLFIREAD,TFILEDATA USE MODE_FD_ll, ONLY: FD_ll,GETFD USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME ! -TYPE(TFILEDATA), INTENT(INOUT) :: TPFILE ! File structure -CHARACTER(LEN=*), INTENT(IN) :: HFIPRI ! File for prints in FM -INTEGER, INTENT(OUT) :: KRESP ! Return code -LOGICAL, INTENT(IN), OPTIONAL :: OPARALLELIO +TYPE(TFILEDATA),POINTER,INTENT(INOUT) :: TPFILE ! File structure +CHARACTER(LEN=*), INTENT(IN) :: HFIPRI ! File for prints in FM +INTEGER, INTENT(OUT) :: KRESP ! Return code +LOGICAL, INTENT(IN), OPTIONAL :: OPARALLELIO ! INTEGER :: ININAR ! Number of articles present in LFI file (unused here) INTEGER :: IRESP TYPE(FD_ll), POINTER :: TZFDLFI -TYPE(TFILEDATA),POINTER :: TZFILE +TYPE(TFILEDATA),POINTER :: TZFILE_DUMMY ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FILE_OPEN_ll','opening '//TRIM(TPFILE%CNAME)//' for '//TRIM(TPFILE%CMODE)) ! +IF (.NOT.ASSOCIATED(TPFILE)) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_FILE_OPEN_ll','TPFILE is not associated') +! +TPFILE%NOPEN_CURRENT = TPFILE%NOPEN_CURRENT + 1 +! IF (TPFILE%LOPENED) THEN - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_OPEN_ll','file '//TRIM(TPFILE%CNAME)//' already opened') + CALL PRINT_MSG(NVERB_INFO,'IO','IO_FILE_OPEN_ll','file '//TRIM(TPFILE%CNAME)//' is already in open state') RETURN END IF ! !Check if file is in filelist -CALL IO_FILE_FIND_BYNAME(TRIM(TPFILE%CNAME),TZFILE,IRESP) +CALL IO_FILE_FIND_BYNAME(TRIM(TPFILE%CNAME),TZFILE_DUMMY,IRESP) IF (IRESP/=0) CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_OPEN_ll','file '//TRIM(TPFILE%CNAME)//' not in filelist') ! CALL FMOPEN_ll(TPFILE%CNAME,TPFILE%CMODE,HFIPRI,TPFILE%NLFINPRAR,TPFILE%NLFITYPE,TPFILE%NLFIVERB,ININAR,KRESP,& @@ -438,6 +442,14 @@ IF (.NOT.TPFILE%LOPENED) THEN RETURN ENDIF ! +IF (TPFILE%NOPEN_CURRENT>1) THEN + CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FILE_CLOSE_ll',TRIM(TPFILE%CNAME)// & + ': decrementing NOPEN_CURRENT (still opened after this call)') + TPFILE%NOPEN_CURRENT = TPFILE%NOPEN_CURRENT - 1 + TPFILE%NCLOSE = TPFILE%NCLOSE + 1 + RETURN +END IF +! !Next lines done before the close to be sure the FD_ll still exists TZFDLFI=>GETFD(ADJUSTL(TRIM(TPFILE%CNAME)//'.lfi')) INB_PROCIO=TZFDLFI%NB_PROCIO @@ -448,9 +460,10 @@ ELSE CALL FMCLOS_ll(TPFILE%CNAME,'KEEP',HFIPRI,KRESP,OPARALLELIO=OPARALLELIO,TPFILE=TPFILE) END IF ! -TPFILE%LOPENED = .FALSE. -TPFILE%NCLOSE = TPFILE%NCLOSE + 1 -TPFILE%NNCID = -1 +TPFILE%LOPENED = .FALSE. +TPFILE%NOPEN_CURRENT = 0 +TPFILE%NCLOSE = TPFILE%NCLOSE + 1 +TPFILE%NNCID = -1 ! IF (INB_PROCIO>1) THEN DO JI = 1,TZFDLFI%NB_PROCIO