diff --git a/src/LIB/SURCOUCHE/src/mode_fd.f90 b/src/LIB/SURCOUCHE/src/mode_fd.f90 index 3dffc73d83e335d16e534c45765dda1df71dab49..4ec00068034138007921a35e69b66bf584a974c7 100644 --- a/src/LIB/SURCOUCHE/src/mode_fd.f90 +++ b/src/LIB/SURCOUCHE/src/mode_fd.f90 @@ -24,19 +24,14 @@ INTEGER, PARAMETER :: JPFINL = 32 ! File name length TYPE FD_ll CHARACTER(LEN=JPFINL) :: NAME ! File name INTEGER :: FLU ! Fortran logical unit - INTEGER :: COMM ! Local MPI communicator CHARACTER(LEN=15) :: MODE ! Flag mode acces ('distrib','global','specific') - INTEGER :: OWNER ! I/O Processor number -!JUANZ - INTEGER :: NB_PROCIO = 1 -!JUANZ TYPE(FD_ll), POINTER :: NEXT END TYPE FD_ll TYPE(FD_ll), POINTER, SAVE :: TFDLIST INTERFACE GETFD - MODULE PROCEDURE GETFD_FILE, GETFD_COMM + MODULE PROCEDURE GETFD_FILE END INTERFACE PUBLIC JPFINL,FD_ll,GETFD,INITFD,NEWFD,DELFD,DISPLAY_FDLIST @@ -65,23 +60,6 @@ GETFD_FILE=>TZFD END FUNCTION GETFD_FILE -FUNCTION GETFD_COMM(KCOMM) - -TYPE(FD_ll), POINTER :: GETFD_COMM -INTEGER :: KCOMM - -TYPE(FD_ll), POINTER :: TZFD - -TZFD=>TFDLIST -DO WHILE(ASSOCIATED(TZFD)) - IF (TZFD%COMM == KCOMM) EXIT - TZFD=>TZFD%NEXT -END DO - -GETFD_COMM=>TZFD - -END FUNCTION GETFD_COMM - FUNCTION NEWFD() TYPE(FD_ll), POINTER :: NEWFD diff --git a/src/LIB/SURCOUCHE/src/mode_fm.f90 b/src/LIB/SURCOUCHE/src/mode_fm.f90 index 3d30c25a80c0b178026a01bddf45b5cbee6d898f..e811f4d4d0e88db527bee03692ecec752b85988b 100644 --- a/src/LIB/SURCOUCHE/src/mode_fm.f90 +++ b/src/LIB/SURCOUCHE/src/mode_fm.f90 @@ -74,9 +74,7 @@ IF (GSMONOPROC) THEN ! sequential execution TZFD=>NEWFD() TZFD%NAME = HFILEM TZFD%MODE = 'GLOBAL' - TZFD%OWNER = ISIOP TZFD%FLU = IONEWFLU() - TZFD%COMM = NMNH_COMM_WORLD ! KNUMBR = TZFD%FLU KRESP = NOERROR @@ -134,7 +132,7 @@ END SUBROUTINE FMLOOK_ll SUBROUTINE IO_FILE_OPEN_ll(TPFILE,KRESP,OPARALLELIO,HPOSITION,HSTATUS) ! USE MODD_CONF, ONLY: NMNHVERSION -USE MODD_IO_ll, ONLY: ISP,LIOCDF4,LLFIOUT,LLFIREAD,TFILEDATA +USE MODD_IO_ll, ONLY: LIOCDF4,LLFIOUT,LLFIREAD,TFILEDATA USE MODE_FD_ll, ONLY: FD_ll,GETFD USE MODE_FIELD, ONLY: TFIELDDATA,TYPEINT USE MODE_FMREAD @@ -240,14 +238,14 @@ SELECT CASE(TPFILE%CTYPE) CALL FMOPEN_ll(TPFILE,IRESP,OPARALLELIO=OPARALLELIO) ! TZFDLFI=>GETFD(ADJUSTL(TRIM(TPFILE%CNAME)//'.lfi')) - IF (TRIM(TPFILE%CMODE) == 'READ' .AND. ISP == TPFILE%NMASTER_RANK) THEN + IF (TRIM(TPFILE%CMODE) == 'READ' .AND. TPFILE%LMASTER) 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 == TPFILE%NMASTER_RANK) THEN + ELSE IF (TRIM(TPFILE%CMODE) == 'WRITE' .AND. TPFILE%LMASTER) 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 @@ -324,7 +322,7 @@ IF (PRESENT(KRESP)) KRESP = IRESP END SUBROUTINE IO_FILE_OPEN_ll SUBROUTINE FMOPEN_ll(TPFILE,KRESP,OPARALLELIO) -USE MODD_IO_ll, ONLY : ISP,ISTDOUT,LIOCDF4,LLFIOUT,LLFIREAD,TFILEDATA +USE MODD_IO_ll, ONLY : ISTDOUT,LIOCDF4,LLFIOUT,LLFIREAD,TFILEDATA USE MODE_FD_ll, ONLY : JPFINL USE MODE_IO_ll, ONLY : OPEN_ll,GCONFIO !JUANZ @@ -419,7 +417,7 @@ CALL OPEN_ll(TPFILE,STATUS="UNKNOWN",MODE='IO_ZSPLIT',IOSTAT=IRESP, & IF (IRESP /= 0) GOTO 1000 -IF (ISP == TPFILE%NMASTER_RANK) THEN +IF (TPFILE%LMASTER) THEN ! Proc I/O case IF (GSFIRST) THEN GSFIRST = .FALSE. @@ -463,7 +461,7 @@ IF (ISP == TPFILE%NMASTER_RANK) THEN GNAMFI = .TRUE. GFATER = .TRUE. ! - INUMBR8 = TPFILE%NLU + INUMBR8 = TPFILE%NLFIFLU GNAMFI8 = GNAMFI GFATER8 = GFATER GSTATS8 = GSTATS @@ -479,7 +477,6 @@ IF (ISP == TPFILE%NMASTER_RANK) THEN INPRAR, & ININAR) -!!$ IF (IRESOU /= 0 .AND. IRESOU /= -11) THEN IF (IRESOU /= 0 ) THEN IRESP = IRESOU ENDIF @@ -654,7 +651,7 @@ SUBROUTINE FMCLOS_ll(TPFILE,HSTATU,KRESP,OPARALLELIO) ! !! J.Escobar 18/10/10 bug with PGI compiler on ADJUSTL !------------------------------------------------------------------------------- -USE MODD_IO_ll, ONLY : ISP,TFILEDATA +USE MODD_IO_ll, ONLY : TFILEDATA USE MODE_FD_ll, ONLY : JPFINL USE MODE_IO_ll, ONLY : CLOSE_ll,UPCASE #if !defined(MNH_SGI) @@ -718,7 +715,7 @@ ELSE ENDIF ENDIF -IF (ISP == TPFILE%NMASTER_RANK) THEN +IF (TPFILE%LMASTER) THEN IF (TPFILE%NLFIFLU > 0) THEN CALL LFIFER(IRESP8,TPFILE%NLFIFLU,YSTATU) IRESP = IRESP8 diff --git a/src/LIB/SURCOUCHE/src/mode_io.f90 b/src/LIB/SURCOUCHE/src/mode_io.f90 index 142d757b16c2ec23f430ae20878e4ed7b0d61c26..22d6e657e976fd1c6df99b3c7b0472174ae6bed3 100644 --- a/src/LIB/SURCOUCHE/src/mode_io.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io.f90 @@ -407,14 +407,11 @@ CONTAINS CASE('GLOBAL') IF (YACTION == 'READ') THEN - TZFD%OWNER = ISP 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. @@ -426,7 +423,7 @@ CONTAINS END IF TPFILE%NSUBFILES_IOZ = 0 - IF (ISP == TZFD%OWNER) THEN + IF (TPFILE%LMASTER) THEN !! I/O processor case TZFD%FLU = IONEWFLU() @@ -535,8 +532,9 @@ CONTAINS TZFD%FLU = JPFNULL END IF + TPFILE%NLU = TZFD%FLU + CASE('SPECIFIC') - TZFD%OWNER = ISP TZFD%FLU = IONEWFLU() TPFILE%NMASTER_RANK = -1 TPFILE%LMASTER = .TRUE. !Every process use the file @@ -614,15 +612,16 @@ CONTAINS #endif - CASE('DISTRIBUTED') - TZFD%OWNER = ISIOP + TPFILE%NLU = TZFD%FLU + + CASE('DISTRIBUTED') TPFILE%NMASTER_RANK = ISIOP TPFILE%LMASTER = (ISP == ISIOP) TPFILE%LMULTIMASTERS = .FALSE. TPFILE%NSUBFILES_IOZ = 0 - IF (ISP == TZFD%OWNER) THEN + IF (TPFILE%LMASTER) THEN TZFD%FLU = IONEWFLU() ELSE !! NON I/O processors case @@ -630,6 +629,8 @@ CONTAINS TZFD%FLU = -1 END IF + TPFILE%NLU = TZFD%FLU + CASE('IO_ZSPLIT') TPFILE%NMASTER_RANK = ISIOP @@ -642,22 +643,12 @@ CONTAINS END IF END IF - TZFD%OWNER = ISIOP TZFD%NAME = TRIM(TPFILE%CNAME)//".lfi" - IF (PRESENT(KNB_PROCIO)) THEN - TZFD%NB_PROCIO = KNB_PROCIO - ELSE - TZFD%NB_PROCIO = 1 - ENDIF - IF( .NOT. GPARALLELIO ) THEN - TZFD%NB_PROCIO = 1 - ENDIF - TZFD%COMM = NMNH_COMM_WORLD #if defined(MNH_IOCDF4) - IF (ISP == TPFILE%NMASTER_RANK .AND. (.NOT. LIOCDF4 .OR. (YACTION=='WRITE' .AND. LLFIOUT) & - & .OR. (YACTION=='READ' .AND. LLFIREAD))) THEN + IF (TPFILE%LMASTER .AND. (.NOT. LIOCDF4 .OR. (YACTION=='WRITE' .AND. LLFIOUT) & + & .OR. (YACTION=='READ' .AND. LLFIREAD))) THEN #else - IF (ISP == TPFILE%NMASTER_RANK) THEN + IF (TPFILE%LMASTER) THEN #endif TZFD%FLU = IONEWFLU() ELSE @@ -665,6 +656,9 @@ CONTAINS IOS = 0 TZFD%FLU = -1 END IF + + TPFILE%NLFIFLU = TZFD%FLU + IF (TPFILE%NSUBFILES_IOZ > 0) THEN IF (.NOT.ALLOCATED(TPFILE%TFILES_IOZ)) THEN ALLOCATE(TPFILE%TFILES_IOZ(TPFILE%NSUBFILES_IOZ)) @@ -678,9 +672,6 @@ CONTAINS TZFD_IOZ =>NEWFD() TZFD_IOZ%NAME = YFILE_IOZ TZFD_IOZ%MODE = 'IO_ZSPLIT' - TZFD_IOZ%OWNER = IRANK_PROCIO - TZFD_IOZ%COMM = NMNH_COMM_WORLD - TZFD_IOZ%NB_PROCIO = TPFILE%NSUBFILES_IOZ TZFD_IOZ%FLU = -1 CALL IO_FILE_FIND_BYNAME(TRIM(TPFILE%CNAME)//TRIM(CFILE),TZSPLITFILE,IRESP,OOLD=.FALSE.) @@ -697,7 +688,7 @@ CONTAINS TZSPLITFILE%LMULTIMASTERS = .FALSE. TZSPLITFILE%NSUBFILES_IOZ = 0 - IF ( IRANK_PROCIO .EQ. ISP ) THEN + IF ( TZSPLITFILE%LMASTER ) THEN #if defined(MNH_IOCDF4) IF (LIOCDF4) THEN IF (YACTION == 'READ' .AND. .NOT. LLFIREAD) THEN @@ -737,7 +728,7 @@ CONTAINS ! Open LFI File for reading !this proc must write on this file open it ... TZFD_IOZ%FLU = IONEWFLU() - TZSPLITFILE%NLU = TZFD_IOZ%FLU + TZSPLITFILE%NLFIFLU = TZFD_IOZ%FLU !! LFI-File case IRESOU = 0 GNAMFI8 = .TRUE. @@ -777,33 +768,9 @@ CONTAINS ! CALL UPDATE_METADATA(TPFILE) - ! Recherche d'un communicateur a reutiliser - ! TZFD is the first element - TPFILE%NMPICOMM = ICOMM - TZFD%COMM = ICOMM -!!$ TZFD%COMM = MPI_COMM_NULL - -!!$ TZFDTEMP=>TZFD%NEXT -!!$ DO WHILE(ASSOCIATED(TZFDTEMP)) -!!$ CALL MPI_COMM_COMPARE(ICOMM,TZFDTEMP%COMM,ICMPRES,IERR) -!!$ IF (ICMPRES == MPI_CONGRUENT) THEN -!!$ TZFD%COMM = TZFDTEMP%COMM -!!$ EXIT -!!$ END IF -!!$ TZFDTEMP=>TZFDTEMP%NEXT -!!$ END DO -!!$ -!!$ IF (TZFD%COMM == MPI_COMM_NULL) THEN -!!$ ! Pas de communicateur equivalent -> on duplique -!!$ ! -!!$ CALL MPI_COMM_DUP(ICOMM, TZFD%COMM, IERR) -!!$ ! WRITE(ISTDOUT,*) 'FILE = ',TZFD%NAME,', comm ',TZFD%COMM& -!!$ ! & , ' cree par duplication de comm ', ICOMM -!!$ END IF IOSTAT = IOS - TPFILE%NLU = TZFD%FLU CONTAINS FUNCTION SUFFIX(HEXT) @@ -834,10 +801,8 @@ CONTAINS CALL PRINT_MSG(NVERB_FATAL,'IO','OPEN_ll::UPDATE_METADATA','TZFDLFI not found for '& //TRIM(TPFILEMD%CNAME)) - !TZFDLFI%CDF exists only if ISP == TZFDLFI%OWNER - IF (TRIM(TPFILEMD%CMODE) == 'READ' .AND. ISP == TPFILEMD%NMASTER_RANK) THEN + IF (TRIM(TPFILEMD%CMODE) == 'READ' .AND. TPFILEMD%LMASTER) 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 '& //TRIM(TPFILEMD%CNAME)) ELSE @@ -845,9 +810,8 @@ CONTAINS 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 == TPFILEMD%NMASTER_RANK) THEN + ELSE IF (TRIM(TPFILEMD%CMODE) == 'WRITE' .AND. TPFILEMD%LMASTER) 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 '& //TRIM(TPFILEMD%CNAME)) END IF @@ -921,12 +885,11 @@ CONTAINS SELECT CASE(TZFD%MODE) CASE('GLOBAL','SPECIFIC') - IF (TZFD%OWNER == ISP) THEN - CLOSE(UNIT=TZFD%FLU, IOSTAT=IRESP,STATUS=STATUSL) - CALL IOFREEFLU(TZFD%FLU) + IF (TPFILE%LMASTER) THEN + CLOSE(UNIT=TPFILE%NLU, IOSTAT=IRESP,STATUS=STATUSL) + CALL IOFREEFLU(TPFILE%NLU) END IF - CALL MPI_ALLREDUCE(IRESP,IGLOBALERR,1,MPI_INTEGER,MPI_BOR,TZFD& - & %COMM,IERR) + CALL MPI_ALLREDUCE(IRESP,IGLOBALERR,1,MPI_INTEGER,MPI_BOR,TPFILE%NMPICOMM,IERR) CASE('DISTRIBUTED') ! nothing to close with FM-Files @@ -934,13 +897,13 @@ CONTAINS ! ! close LFI file in the different PROC ! - IF( .NOT. GPARALLELIO ) THEN + IF( GPARALLELIO ) THEN DO IFILE=1,TPFILE%NSUBFILES_IOZ TZFILE => TPFILE%TFILES_IOZ(IFILE)%TFILE - IF (ISP == TZFILE%NMASTER_RANK) THEN - IF (TZFILE%NLU > 0) THEN !if LFI + IF (TPFILE%LMASTER) THEN + IF (TZFILE%NLFIFLU > 0) THEN !if LFI CALL LFIFER(IRESP8,TZFILE%NLFIFLU,YSTATU) - CALL IOFREEFLU(TZFD_IOZ%FLU) + CALL IOFREEFLU(INT(TPFILE%NLFIFLU)) IRESP = IRESP8 END IF IF (ASSOCIATED(TZFILE%TNCDIMS)) CALL CLEANIOCDF(TZFILE%TNCDIMS) diff --git a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 b/src/LIB/SURCOUCHE/src/mode_netcdf.f90 index bf20b5cef425cda41a2fc74859bca783483d56fb..5cb549b922e80c48ed4739ed0a946c7085df3bb6 100644 --- a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 +++ b/src/LIB/SURCOUCHE/src/mode_netcdf.f90 @@ -161,7 +161,7 @@ END FUNCTION str_replace SUBROUTINE IO_WRITE_HEADER_NC4(TPFILE) ! -USE MODD_IO_ll, ONLY: ISP,TFILEDATA +USE MODD_IO_ll, ONLY: TFILEDATA ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! File structure ! @@ -171,7 +171,7 @@ IF (TRIM(TPFILE%CFORMAT)/='NETCDF4' .AND. TRIM(TPFILE%CFORMAT)/='LFICDF4') RETUR ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_HEADER_NC4','called for file '//TRIM(TPFILE%CNAME)) ! -IF (ISP == TPFILE%NMASTER_RANK) THEN +IF (TPFILE%LMASTER) 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]')