Skip to content
Snippets Groups Projects
Commit 17297fab authored by WAUTELET Philippe's avatar WAUTELET Philippe
Browse files

Philippe 17/11/2017: IO: add fields to TFILEDATA to begin removing of FD_ll structures

parent 81a3fe46
No related branches found
No related tags found
No related merge requests found
This diff is collapsed.
This diff is collapsed.
......@@ -78,10 +78,15 @@ TYPE TFILEDATA
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)
!
INTEGER :: NMPICOMM = -1 !MPI communicator used for IO on this file
INTEGER :: NMASTER_RANK = -1 !Rank of the master process (no meaning if LMULTIMASTERS=.T.)
LOGICAL :: LMASTER = .FALSE. !True if process is master of the file (process that open/read/write/close)
LOGICAL :: LMULTIMASTERS = .FALSE. !True if several processes may access the file
!
! Fields for LFI files
INTEGER(KIND=LFI_INT) :: NLFINPRAR = 0 !Number of predicted articles of the LFI file (non crucial)
INTEGER :: NLFITYPE = -1 !Type of the file (used to generate list of files to transfers)
INTEGER :: NLFIVERB = 1 !LFI verbosity level
INTEGER :: NLFITYPE = -1 !Type of the file (used to generate list of files to transfers)
INTEGER :: NLFIVERB = 1 !LFI verbosity level
INTEGER(KIND=LFI_INT) :: NLFIFLU = -1 !File identifier
!
! Fields for netCDF files
......
......@@ -162,6 +162,7 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FILE_OPEN_ll','opening '//TRIM(TPFILE%CNAME)
!
IF (.NOT.ASSOCIATED(TPFILE)) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_FILE_OPEN_ll','TPFILE is not associated')
!
TPFILE%NOPEN = TPFILE%NOPEN + 1
TPFILE%NOPEN_CURRENT = TPFILE%NOPEN_CURRENT + 1
!
IF (TPFILE%LOPENED) THEN
......@@ -169,6 +170,8 @@ IF (TPFILE%LOPENED) THEN
RETURN
END IF
!
TPFILE%LOPENED = .TRUE.
!
!Check if file is in filelist
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')
......@@ -238,15 +241,15 @@ SELECT CASE(TPFILE%CTYPE)
CALL FMOPEN_ll(TPFILE,IRESP,OPARALLELIO=OPARALLELIO)
!
TZFDLFI=>GETFD(ADJUSTL(TRIM(TPFILE%CNAME)//'.lfi'))
!TZFDLFI%CDF exists only if ISP == TZFDLFI%OWNER
IF (TRIM(TPFILE%CMODE) == 'READ' .AND. ISP == TZFDLFI%OWNER) THEN
!TZFDLFI%CDF exists only if ISP == TPFILE%NMASTER_RANK
IF (TRIM(TPFILE%CMODE) == 'READ' .AND. ISP == TPFILE%NMASTER_RANK) THEN
IF (LIOCDF4 .AND. .NOT.LLFIREAD) THEN
IF (TPFILE%NNCID<0) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_FILE_OPEN_ll','invalid NNCID for '//TRIM(TPFILE%CNAME))
ELSE
TPFILE%NLFIFLU = TZFDLFI%FLU
IF (TPFILE%NLFIFLU<0) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_FILE_OPEN_ll','invalid NLFIFLU for '//TRIM(TPFILE%CNAME))
ENDIF
ELSE IF (TRIM(TPFILE%CMODE) == 'WRITE' .AND. ISP == TZFDLFI%OWNER) THEN
ELSE IF (TRIM(TPFILE%CMODE) == 'WRITE' .AND. ISP == TPFILE%NMASTER_RANK) THEN
IF (LIOCDF4) THEN
IF (TPFILE%NNCID<0) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_FILE_OPEN_ll','invalid NNCID for '//TRIM(TPFILE%CNAME))
END IF
......@@ -318,9 +321,6 @@ SELECT CASE(TPFILE%CTYPE)
END IF
END SELECT
!
TPFILE%LOPENED = .TRUE.
TPFILE%NOPEN = TPFILE%NOPEN + 1
!
IF (PRESENT(KRESP)) KRESP = IRESP
!
END SUBROUTINE IO_FILE_OPEN_ll
......@@ -429,7 +429,7 @@ CALL OPEN_ll(TPFILE,STATUS="UNKNOWN",MODE='IO_ZSPLIT',LFIPAR=TZPARA,IOSTAT=IRESP
IF (IRESP /= 0) GOTO 1000
TZFDLFI=>GETFD(YFNLFI)
IF (ISP == TZFDLFI%OWNER) THEN
IF (ISP == TPFILE%NMASTER_RANK) THEN
! Proc I/O case
IF (GSFIRST) THEN
GSFIRST = .FALSE.
......@@ -506,8 +506,7 @@ IF (ISP == TZFDLFI%OWNER) THEN
ENDIF
END IF
! Broadcast ERROR
CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFDLFI%OWNER-1,TZFDLFI%COMM&
& ,IERR)
CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TZFDLFI%COMM,IERR)
IF (IRESP /= 0) GOTO 1000
......@@ -740,7 +739,7 @@ YFNLFI=ADJUSTL(TRIM(YFILEM)//'.lfi')
TZFDLFI=>GETFD(YFNLFI)
IF (ISP == TZFDLFI%OWNER) THEN
IF (ISP == TPFILE%NMASTER_RANK) THEN
IF (TPFILE%NLFIFLU > 0) THEN
CALL LFIFER(IRESP8,TPFILE%NLFIFLU,YSTATU)
IRESP = IRESP8
......@@ -789,8 +788,7 @@ IF (ISP == TZFDLFI%OWNER) THEN
END IF
END IF
500 CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFDLFI%OWNER-1,TZFDLFI%COMM&
& ,IERR)
500 CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TZFDLFI%COMM,IERR)
IF (IRESP /= 0) GOTO 1000
DEALLOCATE(TZFDLFI%PARAM)
......
......@@ -413,8 +413,21 @@ CONTAINS
CASE('GLOBAL')
IF (YACTION == 'READ') THEN
TZFD%OWNER = ISP
ELSE
TPFILE%NMASTER_RANK = -1
TPFILE%LMASTER = .TRUE. !Every process read the file
TPFILE%LMULTIMASTERS = .TRUE.
ELSE
TZFD%OWNER = ISIOP
IF (TPFILE%CTYPE=='OUTPUTLISTING') THEN
TZFD%OWNER = ISP
TPFILE%NMASTER_RANK = -1
TPFILE%LMASTER = .TRUE. !Every process may write in the file
TPFILE%LMULTIMASTERS = .TRUE.
ELSE
TPFILE%NMASTER_RANK = ISIOP
TPFILE%LMASTER = (ISP == ISIOP)
TPFILE%LMULTIMASTERS = .FALSE.
END IF
END IF
IF (ISP == TZFD%OWNER) THEN
......@@ -529,6 +542,9 @@ CONTAINS
CASE('SPECIFIC')
TZFD%OWNER = ISP
TZFD%FLU = IONEWFLU()
TPFILE%NMASTER_RANK = -1
TPFILE%LMASTER = .TRUE. !Every process use the file
TPFILE%LMULTIMASTERS = .TRUE.
#ifdef MNH_VPP
OPEN(UNIT=TZFD%FLU, &
......@@ -609,6 +625,10 @@ CONTAINS
END IF
TZFD%PARAM=>LFIPAR
TPFILE%NMASTER_RANK = ISIOP
TPFILE%LMASTER = (ISP == ISIOP)
TPFILE%LMULTIMASTERS = .FALSE.
IF (ISP == TZFD%OWNER) THEN
TZFD%FLU = IONEWFLU()
ELSE
......@@ -617,7 +637,11 @@ CONTAINS
TZFD%FLU = -1
END IF
CASE('IO_ZSPLIT')
TPFILE%NMASTER_RANK = ISIOP
TPFILE%LMASTER = (ISP == ISIOP)
TPFILE%LMULTIMASTERS = .FALSE.
TZFD%OWNER = ISIOP
TZFD%NAME = TRIM(TPFILE%CNAME)//".lfi"
......@@ -663,6 +687,11 @@ CONTAINS
CALL IO_FILE_ADD2LIST(TZSPLITFILE,TRIM(TPFILE%CNAME)//TRIM(CFILE),TPFILE%CTYPE,TPFILE%CMODE, &
KLFINPRAR=TPFILE%NLFINPRAR,KLFITYPE=TPFILE%NLFITYPE,KLFIVERB=TPFILE%NLFIVERB)
END IF
!Done outside of the previous IF to prevent problems with .OUT files
TZSPLITFILE%NMPICOMM = ICOMM
TZSPLITFILE%NMASTER_RANK = irank_procio
TZSPLITFILE%LMASTER = (ISP == irank_procio)
TZSPLITFILE%LMULTIMASTERS = .FALSE.
IF ( irank_procio .EQ. ISP ) THEN
#if defined(MNH_IOCDF4)
......@@ -746,6 +775,7 @@ print *,'PW: TPFILE%CNAME=',TPFILE%CNAME,'master,multimasters=',TPFILE%LMASTER,T
! Recherche d'un communicateur a reutiliser
! TZFD is the first element
TPFILE%NMPICOMM = ICOMM
TZFD%COMM = ICOMM
!!$ TZFD%COMM = MPI_COMM_NULL
......@@ -799,7 +829,7 @@ print *,'PW: TPFILE%CNAME=',TPFILE%CNAME,'master,multimasters=',TPFILE%LMASTER,T
//TRIM(TPFILEMD%CNAME))
!TZFDLFI%CDF exists only if ISP == TZFDLFI%OWNER
IF (TRIM(TPFILEMD%CMODE) == 'READ' .AND. ISP == TZFDLFI%OWNER) THEN
IF (TRIM(TPFILEMD%CMODE) == 'READ' .AND. ISP == TPFILEMD%NMASTER_RANK) THEN
IF (LIOCDF4 .AND. .NOT.LLFIREAD) THEN
TPFILEMD%NNCID = TZFDLFI%CDF%NCID
IF (TPFILEMD%NNCID<0) CALL PRINT_MSG(NVERB_FATAL,'IO','OPEN_ll::UPDATE_METADATA','invalid NNCID for '&
......@@ -809,7 +839,7 @@ print *,'PW: TPFILE%CNAME=',TPFILE%CNAME,'master,multimasters=',TPFILE%LMASTER,T
IF (TPFILEMD%NLFIFLU<0) CALL PRINT_MSG(NVERB_FATAL,'IO','OPEN_ll::UPDATE_METADATA','invalid NLFIFLU for '&
//TRIM(TPFILEMD%CNAME))
ENDIF
ELSE IF (TRIM(TPFILEMD%CMODE) == 'WRITE' .AND. ISP == TZFDLFI%OWNER) THEN
ELSE IF (TRIM(TPFILEMD%CMODE) == 'WRITE' .AND. ISP == TPFILEMD%NMASTER_RANK) THEN
IF (LIOCDF4) THEN
TPFILEMD%NNCID = TZFDLFI%CDF%NCID
IF (TPFILEMD%NNCID<0) CALL PRINT_MSG(NVERB_FATAL,'IO','OPEN_ll::UPDATE_METADATA','invalid NNCID for '&
......
......@@ -163,20 +163,15 @@ SUBROUTINE IO_WRITE_HEADER_NC4(TPFILE)
!
USE MODD_IO_ll, ONLY: ISP,TFILEDATA
!
USE MODE_FD_ll
!
TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! File structure
!
INTEGER(KIND=IDCDF_KIND) :: ISTATUS
TYPE(FD_ll), POINTER :: TZFD
!
IF (TRIM(TPFILE%CFORMAT)/='NETCDF4' .AND. TRIM(TPFILE%CFORMAT)/='LFICDF4') RETURN
!
CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_HEADER_NC4','called for file '//TRIM(TPFILE%CNAME))
!
TZFD=>GETFD(TRIM(ADJUSTL(TPFILE%CNAME))//'.lfi')
!
IF (ISP == TZFD%OWNER) THEN
IF (ISP == TPFILE%NMASTER_RANK) THEN
ISTATUS = NF90_PUT_ATT(TPFILE%NNCID, NF90_GLOBAL, 'Conventions', 'CF-1.6')
IF (ISTATUS /= NF90_NOERR) CALL HANDLE_ERR(ISTATUS,__LINE__,'IO_FILE_WRITE_HEADER[NF90_PUT_ATT]')
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment