From 17297fabce4d971c9bd7a591692b9dfa224aa54e Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Fri, 17 Nov 2017 15:33:43 +0100 Subject: [PATCH] Philippe 17/11/2017: IO: add fields to TFILEDATA to begin removing of FD_ll structures --- src/LIB/SURCOUCHE/src/fmread_ll.f90 | 599 ++++++++------------------ src/LIB/SURCOUCHE/src/fmwrit_ll.f90 | 215 +++++---- src/LIB/SURCOUCHE/src/modd_io.f90 | 9 +- src/LIB/SURCOUCHE/src/mode_fm.f90 | 22 +- src/LIB/SURCOUCHE/src/mode_io.f90 | 36 +- src/LIB/SURCOUCHE/src/mode_netcdf.f90 | 7 +- 6 files changed, 345 insertions(+), 543 deletions(-) diff --git a/src/LIB/SURCOUCHE/src/fmread_ll.f90 b/src/LIB/SURCOUCHE/src/fmread_ll.f90 index aee1bd05a..4021ea21a 100644 --- a/src/LIB/SURCOUCHE/src/fmread_ll.f90 +++ b/src/LIB/SURCOUCHE/src/fmread_ll.f90 @@ -69,25 +69,55 @@ PUBLIC IO_READ_FIELD,IO_READ_FIELD_LB CONTAINS -SUBROUTINE IO_BCAST_FIELD_METADATA(TPFD,TPFIELD) -USE MODE_FD_ll, ONLY : FD_ll -TYPE(FD_ll), POINTER, INTENT(IN) :: TPFD -TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD +SUBROUTINE IO_FILE_READ_CHECK(TPFILE,HSUBR,KRESP) +TYPE(TFILEDATA), INTENT(IN) :: TPFILE +CHARACTER(LEN=*), INTENT(IN) :: HSUBR +INTEGER, INTENT(OUT) :: KRESP +! +KRESP = 0 +! +!Check if file is opened +IF (.NOT.TPFILE%LOPENED) THEN + CALL PRINT_MSG(NVERB_ERROR,'IO',HSUBR,TRIM(TPFILE%CNAME)//' is not opened') + KRESP = -201 + RETURN +END IF +! +!Check if file is in the right opening mode +IF (TPFILE%CMODE/='READ') THEN + CALL PRINT_MSG(NVERB_WARNING,'IO',HSUBR,& + TRIM(TPFILE%CNAME)//': reading in a file opened in '//TRIM(TPFILE%CMODE)//' mode') +END IF +! +!Check fileformat +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 + RETURN +END IF +! +END SUBROUTINE IO_FILE_READ_CHECK + + +SUBROUTINE IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD) +TYPE(TFILEDATA), INTENT(IN) :: TPFILE +TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD ! INTEGER :: IERR ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_BCAST_FIELD_METADATA','called for '//TRIM(TPFIELD%CMNHNAME)) ! -CALL MPI_BCAST(TPFIELD%CMNHNAME, LEN(TPFIELD%CMNHNAME), MPI_CHARACTER,TPFD%OWNER-1,TPFD%COMM,IERR) -CALL MPI_BCAST(TPFIELD%CSTDNAME, LEN(TPFIELD%CSTDNAME), MPI_CHARACTER,TPFD%OWNER-1,TPFD%COMM,IERR) -CALL MPI_BCAST(TPFIELD%CLONGNAME,LEN(TPFIELD%CLONGNAME),MPI_CHARACTER,TPFD%OWNER-1,TPFD%COMM,IERR) -CALL MPI_BCAST(TPFIELD%CUNITS, LEN(TPFIELD%CUNITS), MPI_CHARACTER,TPFD%OWNER-1,TPFD%COMM,IERR) -CALL MPI_BCAST(TPFIELD%CDIR, LEN(TPFIELD%CDIR), MPI_CHARACTER,TPFD%OWNER-1,TPFD%COMM,IERR) -CALL MPI_BCAST(TPFIELD%CLBTYPE, LEN(TPFIELD%CLBTYPE), MPI_CHARACTER,TPFD%OWNER-1,TPFD%COMM,IERR) -CALL MPI_BCAST(TPFIELD%CCOMMENT, LEN(TPFIELD%CCOMMENT), MPI_CHARACTER,TPFD%OWNER-1,TPFD%COMM,IERR) -CALL MPI_BCAST(TPFIELD%NGRID, 1, MPI_INTEGER, TPFD%OWNER-1,TPFD%COMM,IERR) -CALL MPI_BCAST(TPFIELD%NTYPE, 1, MPI_INTEGER, TPFD%OWNER-1,TPFD%COMM,IERR) -CALL MPI_BCAST(TPFIELD%NDIMS, 1, MPI_INTEGER, TPFD%OWNER-1,TPFD%COMM,IERR) +CALL MPI_BCAST(TPFIELD%CMNHNAME, LEN(TPFIELD%CMNHNAME), MPI_CHARACTER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) +CALL MPI_BCAST(TPFIELD%CSTDNAME, LEN(TPFIELD%CSTDNAME), MPI_CHARACTER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) +CALL MPI_BCAST(TPFIELD%CLONGNAME,LEN(TPFIELD%CLONGNAME),MPI_CHARACTER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) +CALL MPI_BCAST(TPFIELD%CUNITS, LEN(TPFIELD%CUNITS), MPI_CHARACTER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) +CALL MPI_BCAST(TPFIELD%CDIR, LEN(TPFIELD%CDIR), MPI_CHARACTER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) +CALL MPI_BCAST(TPFIELD%CLBTYPE, LEN(TPFIELD%CLBTYPE), MPI_CHARACTER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) +CALL MPI_BCAST(TPFIELD%CCOMMENT, LEN(TPFIELD%CCOMMENT), MPI_CHARACTER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) +CALL MPI_BCAST(TPFIELD%NGRID, 1, MPI_INTEGER, TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) +CALL MPI_BCAST(TPFIELD%NTYPE, 1, MPI_INTEGER, TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) +CALL MPI_BCAST(TPFIELD%NDIMS, 1, MPI_INTEGER, TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) ! END SUBROUTINE IO_BCAST_FIELD_METADATA @@ -124,60 +154,43 @@ REAL, INTENT(INOUT) :: PFIELD ! data field INTEGER,OPTIONAL, INTENT(OUT) :: KRESP ! return-code ! INTEGER :: IERR -TYPE(FD_ll), POINTER :: TZFD INTEGER :: IRESP ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_X0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME)) ! IRESP = 0 ! -TZFD=>GETFD(TRIM(ADJUSTL(TPFILE%CNAME))//'.lfi') -IF (ASSOCIATED(TZFD)) THEN +CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_X0',IRESP) +! +IF (IRESP==0) THEN IF (GSMONOPROC) THEN ! sequential execution IF (TPFILE%CFORMAT=='NETCDF4') THEN CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP) ELSE IF (TPFILE%CFORMAT=='LFI') THEN CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP) ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN - !Only detected if CFORMAT='LFICDF4' - !This seems to be allowed for netCDF4 but it is not clean - CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_FIELD_BYFIELD_X0',& - TRIM(TPFILE%CNAME)//': reading in a file opened in WRITE mode') CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP) - ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_BYFIELD_X0',& - TRIM(TPFILE%CNAME)//': invalid fileformat ('//TRIM(TPFILE%CFORMAT)//')') END IF ELSE - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN IF (TPFILE%CFORMAT=='NETCDF4') THEN CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP) ELSE IF (TPFILE%CFORMAT=='LFI') THEN CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP) ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN - !Only detected if CFORMAT='LFICDF4' - !This seems to be allowed for netCDF4 but it is not clean - CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_FIELD_BYFIELD_X0',& - TRIM(TPFILE%CNAME)//': reading in a file opened in WRITE mode') CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP) - ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_BYFIELD_X0',& - TRIM(TPFILE%CNAME)//': invalid fileformat ('//TRIM(TPFILE%CFORMAT)//')') END IF END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) ! !Broadcast header only if IRESP==-111 !because metadata of field has been modified in IO_READ_FIELD_xxx - IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TZFD,TPFIELD) + IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD) ! ! Broadcast Field - CALL MPI_BCAST(PFIELD,1,MPI_FLOAT,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(PFIELD,1,MPI_FLOAT,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF -ELSE - IRESP = -61 - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_BYFIELD_X0','file '//TRIM(TPFILE%CNAME)//' not found') END IF ! IF (IRESP==-111) IRESP = 0 !-111 is not really an error (metadata has changed) @@ -231,7 +244,6 @@ INTEGER,OPTIONAL, INTENT(IN) :: KJMAX_ll TYPE(ZONE_ll),DIMENSION(ISNPROC),OPTIONAL,INTENT(IN) :: TPSPLITTING ! splitting of the domain ! INTEGER :: IERR -TYPE(FD_ll), POINTER :: TZFD REAL,DIMENSION(:),POINTER :: ZFIELDP LOGICAL :: GALLOC INTEGER :: IRESP @@ -242,39 +254,26 @@ GALLOC = .FALSE. IRESP = 0 ZFIELDP => NULL() ! -TZFD=>GETFD(TRIM(ADJUSTL(TPFILE%CNAME))//'.lfi') -IF (ASSOCIATED(TZFD)) THEN +CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_X1',IRESP) +! +IF (IRESP==0) THEN IF (GSMONOPROC) THEN ! sequential execution IF (TPFILE%CFORMAT=='NETCDF4') THEN CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP) ELSE IF (TPFILE%CFORMAT=='LFI') THEN CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP) ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN - !Only detected if CFORMAT='LFICDF4' - !This seems to be allowed for netCDF4 but it is not clean - CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_FIELD_BYFIELD_X1',& - TRIM(TPFILE%CNAME)//': reading in a file opened in WRITE mode') CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP) - ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_BYFIELD_X1',& - TRIM(TPFILE%CNAME)//': invalid fileformat ('//TRIM(TPFILE%CFORMAT)//')') END IF ELSE - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,TPFIELD%CDIR,GALLOC, KIMAX_ll, KJMAX_ll) IF (TPFILE%CFORMAT=='NETCDF4') THEN CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP) ELSE IF (TPFILE%CFORMAT=='LFI') THEN CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP) ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN - !Only detected if CFORMAT='LFICDF4' - !This seems to be allowed for netCDF4 but it is not clean - CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_FIELD_BYFIELD_X1',& - TRIM(TPFILE%CNAME)//': reading in a file opened in WRITE mode') CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP) - ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_BYFIELD_X1',& - TRIM(TPFILE%CNAME)//': invalid fileformat ('//TRIM(TPFILE%CFORMAT)//')') END IF ELSE !Not really necessary but useful to suppress alerts with Valgrind @@ -282,23 +281,20 @@ IF (ASSOCIATED(TZFD)) THEN GALLOC = .TRUE. END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) ! !Broadcast header only if IRESP==-111 !because metadata of field has been modified in IO_READ_FIELD_xxx - IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TZFD,TPFIELD) + IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD) ! IF (TPFIELD%CDIR /= 'XX' .AND. TPFIELD%CDIR /='YY') THEN ! Broadcast Field - CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MPI_FLOAT,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MPI_FLOAT,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) ELSE !Scatter Field - CALL SCATTER_XXFIELD(TPFIELD%CDIR,ZFIELDP,PFIELD,TZFD%OWNER,TZFD%COMM,TPSPLITTING) + CALL SCATTER_XXFIELD(TPFIELD%CDIR,ZFIELDP,PFIELD,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM,TPSPLITTING) END IF END IF -ELSE - IRESP = -61 - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_BYFIELD_X1','file '//TRIM(TPFILE%CNAME)//' not found') END IF ! IF (GALLOC) DEALLOCATE (ZFIELDP) @@ -357,7 +353,6 @@ INTEGER, OPTIONAL, INTENT(IN) :: KJMAX_ll TYPE(ZONE_ll),DIMENSION(ISNPROC),OPTIONAL,INTENT(IN) :: TPSPLITTING ! splitting of the domain ! INTEGER :: IERR -TYPE(FD_ll), POINTER :: TZFD REAL,DIMENSION(:,:),POINTER :: ZFIELDP LOGICAL :: GALLOC INTEGER :: IRESP @@ -373,8 +368,9 @@ IRESP = 0 ZFIELDP => NULL() ! IHEXTOT = 2*JPHEXT+1 -TZFD=>GETFD(TRIM(ADJUSTL(TPFILE%CNAME))//'.lfi') -IF (ASSOCIATED(TZFD)) THEN +CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_X2',IRESP) +! +IF (IRESP==0) THEN IF (GSMONOPROC) THEN ! sequential execution IF (LPACK .AND. L1D .AND. SIZE(PFIELD,1)==IHEXTOT .AND. SIZE(PFIELD,2)==IHEXTOT) THEN ZFIELDP=>PFIELD(JPHEXT+1:JPHEXT+1,JPHEXT+1:JPHEXT+1) @@ -388,14 +384,7 @@ IF (ASSOCIATED(TZFD)) THEN ELSE IF (TPFILE%CFORMAT=='LFI') THEN CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP) ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN - !Only detected if CFORMAT='LFICDF4' - !This seems to be allowed for netCDF4 but it is not clean - CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_FIELD_BYFIELD_X2',& - TRIM(TPFILE%CNAME)//': reading in a file opened in WRITE mode') CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP) - ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_BYFIELD_X2',& - TRIM(TPFILE%CNAME)//': invalid fileformat ('//TRIM(TPFILE%CFORMAT)//')') END IF IF (LPACK .AND. L1D .AND. SIZE(PFIELD,1)==IHEXTOT .AND. SIZE(PFIELD,2)==IHEXTOT) THEN PFIELD(:,:)=SPREAD(SPREAD(PFIELD(JPHEXT+1,JPHEXT+1),DIM=1,NCOPIES=IHEXTOT),DIM=2,NCOPIES=IHEXTOT) @@ -404,7 +393,7 @@ IF (ASSOCIATED(TZFD)) THEN END IF ELSE CALL SECOND_MNH2(T0) - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN ! I/O processor case CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,TPFIELD%CDIR,GALLOC, KIMAX_ll, KJMAX_ll) IF (TPFILE%CFORMAT=='NETCDF4') THEN @@ -412,14 +401,7 @@ IF (ASSOCIATED(TZFD)) THEN ELSE IF (TPFILE%CFORMAT=='LFI') THEN CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP) ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN - !Only detected if CFORMAT='LFICDF4' - !This seems to be allowed for netCDF4 but it is not clean - CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_FIELD_BYFIELD_X2',& - TRIM(TPFILE%CNAME)//': reading in a file opened in WRITE mode') CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP) - ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_BYFIELD_X2',& - TRIM(TPFILE%CNAME)//': invalid fileformat ('//TRIM(TPFILE%CFORMAT)//')') END IF ELSE !Not really necessary but useful to suppress alerts with Valgrind @@ -429,19 +411,19 @@ IF (ASSOCIATED(TZFD)) THEN CALL SECOND_MNH2(T1) TIMEZ%T_READ2D_READ=TIMEZ%T_READ2D_READ + T1 - T0 ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) ! !Broadcast header only if IRESP==-111 !because metadata of field has been modified in IO_READ_FIELD_xxx - IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TZFD,TPFIELD) + IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD) ! IF (TPFIELD%CDIR == 'XX' .OR. TPFIELD%CDIR == 'YY') THEN ! XX or YY Scatter Field - CALL SCATTER_XXFIELD(TPFIELD%CDIR,ZFIELDP,PFIELD,TZFD%OWNER,TZFD%COMM,TPSPLITTING) + CALL SCATTER_XXFIELD(TPFIELD%CDIR,ZFIELDP,PFIELD,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM,TPSPLITTING) ELSE IF (TPFIELD%CDIR == 'XY') THEN IF (LPACK .AND. L2D) THEN ! 2D compact case - CALL SCATTER_XXFIELD('XX',ZFIELDP(:,1),PFIELD(:,JPHEXT+1),TZFD%OWNER,TZFD%COMM,TPSPLITTING) + CALL SCATTER_XXFIELD('XX',ZFIELDP(:,1),PFIELD(:,JPHEXT+1),TPFILE%NMASTER_RANK,TPFILE%NMPICOMM,TPSPLITTING) PFIELD(:,:) = SPREAD(PFIELD(:,JPHEXT+1),DIM=2,NCOPIES=IHEXTOT) ELSE #ifdef MNH_GA @@ -449,7 +431,7 @@ IF (ASSOCIATED(TZFD)) THEN ! init/create the ga , dim3 = 1 ! CALL MNH_INIT_GA(SIZE(PFIELD,1),SIZE(PFIELD,2),1,HRECFM,"READ") - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN ! ! put the data in the g_a , this proc get this 1 slide ! @@ -468,18 +450,15 @@ IF (ASSOCIATED(TZFD)) THEN DEALLOCATE(ZFIELD_GA) #else ! XY Scatter Field - CALL SCATTER_XYFIELD(ZFIELDP,PFIELD,TZFD%OWNER,TZFD%COMM) + CALL SCATTER_XYFIELD(ZFIELDP,PFIELD,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) #endif END IF ELSE - CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MPI_FLOAT,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MPI_FLOAT,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF END IF CALL SECOND_MNH2(T2) TIMEZ%T_READ2D_SCAT=TIMEZ%T_READ2D_SCAT + T2 - T1 -ELSE - IRESP = -61 - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_BYFIELD_X2','file '//TRIM(TPFILE%CNAME)//' not found') END IF ! IF (GALLOC) DEALLOCATE (ZFIELDP) @@ -573,7 +552,9 @@ YDIR = TPFIELD%CDIR ! IHEXTOT = 2*JPHEXT+1 TZFD=>GETFD(TRIM(ADJUSTL(TPFILE%CNAME))//'.lfi') -IF (ASSOCIATED(TZFD)) THEN +CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_X3',IRESP) +! +IF (IRESP==0) THEN IF (GSMONOPROC .AND. (TZFD%NB_PROCIO==1) ) THEN ! sequential execution IF (LPACK .AND. L1D .AND. SIZE(PFIELD,1)==IHEXTOT .AND. SIZE(PFIELD,2)==IHEXTOT) THEN ZFIELDP=>PFIELD(JPHEXT+1:JPHEXT+1,JPHEXT+1:JPHEXT+1,:) @@ -588,14 +569,7 @@ IF (ASSOCIATED(TZFD)) THEN ELSE IF (TPFILE%CFORMAT=='LFI') THEN CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP) ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN - !Only detected if CFORMAT='LFICDF4' - !This seems to be allowed for netCDF4 but it is not clean - CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_FIELD_BYFIELD_X3',& - TRIM(TPFILE%CNAME)//': reading in a file opened in WRITE mode') CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP) - ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_BYFIELD_X3',& - TRIM(TPFILE%CNAME)//': invalid fileformat ('//TRIM(TPFILE%CFORMAT)//')') END IF IF (LPACK .AND. L1D .AND. SIZE(PFIELD,1)==IHEXTOT .AND. SIZE(PFIELD,2)==IHEXTOT) THEN PFIELD(:,:,:)=SPREAD(SPREAD(PFIELD(JPHEXT+1,JPHEXT+1,:),DIM=1,NCOPIES=IHEXTOT),DIM=2,NCOPIES=IHEXTOT) @@ -603,7 +577,7 @@ IF (ASSOCIATED(TZFD)) THEN PFIELD(:,:,:)=SPREAD(ZFIELDP(:,1,:),DIM=2,NCOPIES=IHEXTOT) END IF ELSE IF ( TZFD%NB_PROCIO==1 .OR. YDIR == '--' ) THEN ! multiprocesses execution & 1 IO proc - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN ! I/O process case CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,YDIR,GALLOC) IF (TPFILE%CFORMAT=='NETCDF4') THEN @@ -611,14 +585,7 @@ IF (ASSOCIATED(TZFD)) THEN ELSE IF (TPFILE%CFORMAT=='LFI') THEN CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP) ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN - !Only detected if CFORMAT='LFICDF4' - !This seems to be allowed for netCDF4 but it is not clean - CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_FIELD_BYFIELD_X3',& - TRIM(TPFILE%CNAME)//': reading in a file opened in WRITE mode') CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP) - ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_BYFIELD_X3',& - TRIM(TPFILE%CNAME)//': invalid fileformat ('//TRIM(TPFILE%CFORMAT)//')') END IF ELSE !Not really necessary but useful to suppress alerts with Valgrind @@ -626,27 +593,27 @@ IF (ASSOCIATED(TZFD)) THEN GALLOC = .TRUE. END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) ! !Broadcast header only if IRESP==-111 !because metadata of field has been modified in IO_READ_FIELD_xxx - IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TZFD,TPFIELD) + IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD) ! IF (YDIR == 'XX' .OR. YDIR =='YY') THEN ! XX or YY Scatter Field - CALL SCATTER_XXFIELD(YDIR,ZFIELDP,PFIELD,TZFD%OWNER,TZFD%COMM) + CALL SCATTER_XXFIELD(YDIR,ZFIELDP,PFIELD,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) ELSE IF (YDIR == 'XY') THEN IF (LPACK .AND. L2D) THEN ! 2D compact case - CALL SCATTER_XXFIELD('XX',ZFIELDP(:,1,:),PFIELD(:,JPHEXT+1,:),TZFD%OWNER,TZFD%COMM) + CALL SCATTER_XXFIELD('XX',ZFIELDP(:,1,:),PFIELD(:,JPHEXT+1,:),TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) PFIELD(:,:,:) = SPREAD(PFIELD(:,JPHEXT+1,:),DIM=2,NCOPIES=IHEXTOT) ELSE ! XY Scatter Field - CALL SCATTER_XYFIELD(ZFIELDP,PFIELD,TZFD%OWNER,TZFD%COMM) + CALL SCATTER_XYFIELD(ZFIELDP,PFIELD,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) END IF ELSE ! Broadcast Field - CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MPI_FLOAT,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MPI_FLOAT,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF ELSE ! multiprocesses execution & // IO ! @@ -673,7 +640,7 @@ IF (ASSOCIATED(TZFD)) THEN WRITE(YSUFFIX,'(I4.4)') JKK TZFIELD%CMNHNAME = TRIM(TPFIELD%CMNHNAME)//TRIM(YSUFFIX) ! - IK_RANK = TZFD_IOZ%OWNER + IK_RANK = TZFILE%NMASTER_RANK ! IF (ISP == IK_RANK ) THEN IF ( SIZE(ZSLICE_ll) .EQ. 0 ) THEN @@ -688,10 +655,9 @@ IF (ASSOCIATED(TZFD)) THEN CALL IO_READ_FIELD_NC4(TZFILE,TZFIELD,ZSLICE_ll,IRESP) ELSE IF (TPFILE%CFORMAT=='LFI') THEN CALL IO_READ_FIELD_LFI(TZFILE,TZFIELD,ZSLICE_ll,IRESP) - ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_BYFIELD_X3',& - TRIM(TPFILE%CNAME)//': invalid fileformat ('//TRIM(TPFILE%CFORMAT)//')') - END IF + ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN + CALL IO_READ_FIELD_NC4(TZFILE,TZFIELD,ZSLICE_ll,IRESP) + END IF CALL SECOND_MNH2(T1) TIMEZ%T_READ3D_READ=TIMEZ%T_READ3D_READ + T1 - T0 ! @@ -739,7 +705,7 @@ IF (ASSOCIATED(TZFD)) THEN TZFILE => TPFILE TZFIELD = TPFIELD END IF - IK_RANK = TZFD_IOZ%OWNER + IK_RANK = TZFILE%NMASTER_RANK IF (ISP == IK_RANK ) THEN IF ( SIZE(ZSLICE_ll) .EQ. 0 ) THEN DEALLOCATE(ZSLICE_ll) @@ -753,9 +719,8 @@ IF (ASSOCIATED(TZFD)) THEN CALL IO_READ_FIELD_NC4(TZFILE,TZFIELD,ZSLICE_ll,IRESP) ELSE IF (TPFILE%CFORMAT=='LFI') THEN CALL IO_READ_FIELD_LFI(TZFILE,TZFIELD,ZSLICE_ll,IRESP) - ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_BYFIELD_X3',& - TRIM(TPFILE%CNAME)//': invalid fileformat ('//TRIM(TPFILE%CFORMAT)//')') + ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN + CALL IO_READ_FIELD_NC4(TZFILE,TZFIELD,ZSLICE_ll,IRESP) END IF !JUANIOZ CALL SECOND_MNH2(T1) @@ -785,12 +750,12 @@ IF (ASSOCIATED(TZFD)) THEN IF (YDIR == 'XX' .OR. YDIR =='YY') THEN ! XX or YY Scatter Field STOP " XX ou YY NON PREVU SUR BG POUR LE MOMENT " - CALL SCATTER_XXFIELD(YDIR,ZFIELDP,PFIELD,TZFD%OWNER,TZFD%COMM) + CALL SCATTER_XXFIELD(YDIR,ZFIELDP,PFIELD,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) ELSE IF (YDIR == 'XY') THEN IF (LPACK .AND. L2D) THEN ! 2D compact case STOP " L2D NON PREVU SUR BG POUR LE MOMENT " - CALL SCATTER_XXFIELD('XX',ZFIELDP(:,1,:),PFIELD(:,JPHEXT+1,:),TZFD%OWNER,TZFD%COMM) + CALL SCATTER_XXFIELD('XX',ZFIELDP(:,1,:),PFIELD(:,JPHEXT+1,:),TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) PFIELD(:,:,:) = SPREAD(PFIELD(:,JPHEXT+1,:),DIM=2,NCOPIES=IHEXTOT) ELSE ! @@ -828,7 +793,7 @@ IF (ASSOCIATED(TZFD)) THEN ELSE ! Broadcast Field STOP " Broadcast Field NON PREVU SUR BG POUR LE MOMENT " - CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MPI_FLOAT,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MPI_FLOAT,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF CALL SECOND_MNH2(T0) IF (NB_REQ .GT.0 ) THEN @@ -843,14 +808,11 @@ IF (ASSOCIATED(TZFD)) THEN ! !Broadcast header only if IRESP==-111 !because metadata of field has been modified in IO_READ_FIELD_xxx - IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TZFD,TPFIELD) + IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD) ! #endif !JUAN BG Z SLICE END IF !(GSMONOPROC) -ELSE - IRESP = -61 - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_BYFIELD_X3','file '//TRIM(TPFILE%CNAME)//' not found') END IF ! IF (GALLOC) DEALLOCATE (ZFIELDP) @@ -907,7 +869,6 @@ REAL,DIMENSION(:,:,:,:),TARGET,INTENT(INOUT) :: PFIELD ! array containing the INTEGER, OPTIONAL, INTENT(OUT) :: KRESP ! return-code ! INTEGER :: IERR -TYPE(FD_ll), POINTER :: TZFD REAL,DIMENSION(:,:,:,:),POINTER :: ZFIELDP LOGICAL :: GALLOC INTEGER :: IRESP @@ -920,8 +881,9 @@ IRESP = 0 ZFIELDP => NULL() ! IHEXTOT = 2*JPHEXT+1 -TZFD=>GETFD(TRIM(ADJUSTL(TPFILE%CNAME))//'.lfi') -IF (ASSOCIATED(TZFD)) THEN +CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_X4',IRESP) +! +IF (IRESP==0) THEN IF (GSMONOPROC) THEN ! sequential execution IF (LPACK .AND. L1D .AND. SIZE(PFIELD,1)==IHEXTOT .AND. SIZE(PFIELD,2)==IHEXTOT) THEN ZFIELDP=>PFIELD(JPHEXT+1:JPHEXT+1,JPHEXT+1:JPHEXT+1,:,:) @@ -935,14 +897,7 @@ IF (ASSOCIATED(TZFD)) THEN ELSE IF (TPFILE%CFORMAT=='LFI') THEN CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP) ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN - !Only detected if CFORMAT='LFICDF4' - !This seems to be allowed for netCDF4 but it is not clean - CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_FIELD_BYFIELD_X4',& - TRIM(TPFILE%CNAME)//': reading in a file opened in WRITE mode') CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP) - ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_BYFIELD_X4',& - TRIM(TPFILE%CNAME)//': invalid fileformat ('//TRIM(TPFILE%CFORMAT)//')') END IF IF (LPACK .AND. L1D .AND. SIZE(PFIELD,1)==IHEXTOT .AND. SIZE(PFIELD,2)==IHEXTOT) THEN PFIELD(:,:,:,:)=SPREAD(SPREAD(PFIELD(JPHEXT+1,JPHEXT+1,:,:),DIM=1,NCOPIES=IHEXTOT),DIM=2,NCOPIES=IHEXTOT) @@ -950,7 +905,7 @@ IF (ASSOCIATED(TZFD)) THEN PFIELD(:,:,:,:)=SPREAD(PFIELD(:,JPHEXT+1,:,:),DIM=2,NCOPIES=IHEXTOT) END IF ELSE - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN ! I/O processor case CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,TPFIELD%CDIR,GALLOC) IF (TPFILE%CFORMAT=='NETCDF4') THEN @@ -958,14 +913,7 @@ IF (ASSOCIATED(TZFD)) THEN ELSE IF (TPFILE%CFORMAT=='LFI') THEN CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP) ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN - !Only detected if CFORMAT='LFICDF4' - !This seems to be allowed for netCDF4 but it is not clean - CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_FIELD_BYFIELD_X4',& - TRIM(TPFILE%CNAME)//': reading in a file opened in WRITE mode') CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP) - ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_BYFIELD_X4',& - TRIM(TPFILE%CNAME)//': invalid fileformat ('//TRIM(TPFILE%CFORMAT)//')') END IF ELSE !Not really necessary but useful to suppress alerts with Valgrind @@ -973,31 +921,28 @@ IF (ASSOCIATED(TZFD)) THEN GALLOC = .TRUE. END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) ! !Broadcast header only if IRESP==-111 !because metadata of field has been modified in IO_READ_FIELD_xxx - IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TZFD,TPFIELD) + IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD) ! IF (TPFIELD%CDIR == 'XX' .OR. TPFIELD%CDIR == 'YY') THEN ! XX or YY Scatter Field - CALL SCATTER_XXFIELD(TPFIELD%CDIR,ZFIELDP,PFIELD,TZFD%OWNER,TZFD%COMM) + CALL SCATTER_XXFIELD(TPFIELD%CDIR,ZFIELDP,PFIELD,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) ELSE IF (TPFIELD%CDIR == 'XY') THEN IF (LPACK .AND. L2D) THEN ! 2D compact case - CALL SCATTER_XXFIELD('XX',ZFIELDP(:,1,:,:),PFIELD(:,JPHEXT+1,:,:),TZFD%OWNER,TZFD%COMM) + CALL SCATTER_XXFIELD('XX',ZFIELDP(:,1,:,:),PFIELD(:,JPHEXT+1,:,:),TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) PFIELD(:,:,:,:) = SPREAD(PFIELD(:,JPHEXT+1,:,:),DIM=2,NCOPIES=IHEXTOT) ELSE ! XY Scatter Field - CALL SCATTER_XYFIELD(ZFIELDP,PFIELD,TZFD%OWNER,TZFD%COMM) + CALL SCATTER_XYFIELD(ZFIELDP,PFIELD,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) END IF ELSE - CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MPI_FLOAT,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MPI_FLOAT,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF END IF -ELSE - IRESP = -61 - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_BYFIELD_X4','file '//TRIM(TPFILE%CNAME)//' not found') END IF ! IF (GALLOC) DEALLOCATE (ZFIELDP) @@ -1050,7 +995,6 @@ REAL,DIMENSION(:,:,:,:,:),TARGET,INTENT(INOUT) :: PFIELD ! array containing th INTEGER, OPTIONAL, INTENT(OUT) :: KRESP ! return-code ! INTEGER :: IERR -TYPE(FD_ll), POINTER :: TZFD REAL,DIMENSION(:,:,:,:,:),POINTER :: ZFIELDP LOGICAL :: GALLOC INTEGER :: IRESP @@ -1063,8 +1007,9 @@ IRESP = 0 ZFIELDP => NULL() ! IHEXTOT = 2*JPHEXT+1 -TZFD=>GETFD(TRIM(ADJUSTL(TPFILE%CNAME))//'.lfi') -IF (ASSOCIATED(TZFD)) THEN +CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_X5',IRESP) +! +IF (IRESP==0) THEN IF (GSMONOPROC) THEN ! sequential execution IF (LPACK .AND. L1D .AND. SIZE(PFIELD,1)==IHEXTOT .AND. SIZE(PFIELD,2)==IHEXTOT) THEN ZFIELDP=>PFIELD(JPHEXT+1:JPHEXT+1,JPHEXT+1:JPHEXT+1,:,:,:) @@ -1078,14 +1023,7 @@ IF (ASSOCIATED(TZFD)) THEN ELSE IF (TPFILE%CFORMAT=='LFI') THEN CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP) ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN - !Only detected if CFORMAT='LFICDF4' - !This seems to be allowed for netCDF4 but it is not clean - CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_FIELD_BYFIELD_X5',& - TRIM(TPFILE%CNAME)//': reading in a file opened in WRITE mode') CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP) - ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_BYFIELD_X5',& - TRIM(TPFILE%CNAME)//': invalid fileformat ('//TRIM(TPFILE%CFORMAT)//')') END IF IF (LPACK .AND. L1D .AND. SIZE(PFIELD,1)==IHEXTOT .AND. SIZE(PFIELD,2)==IHEXTOT) THEN PFIELD(:,:,:,:,:)=SPREAD(SPREAD(PFIELD(JPHEXT+1,JPHEXT+1,:,:,:),DIM=1,NCOPIES=IHEXTOT),DIM=2,NCOPIES=IHEXTOT) @@ -1093,7 +1031,7 @@ IF (ASSOCIATED(TZFD)) THEN PFIELD(:,:,:,:,:)=SPREAD(PFIELD(:,JPHEXT+1,:,:,:),DIM=2,NCOPIES=IHEXTOT) END IF ELSE - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN ! I/O processor case CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,TPFIELD%CDIR,GALLOC) IF (TPFILE%CFORMAT=='NETCDF4') THEN @@ -1101,14 +1039,7 @@ IF (ASSOCIATED(TZFD)) THEN ELSE IF (TPFILE%CFORMAT=='LFI') THEN CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP) ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN - !Only detected if CFORMAT='LFICDF4' - !This seems to be allowed for netCDF4 but it is not clean - CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_FIELD_BYFIELD_X5',& - TRIM(TPFILE%CNAME)//': reading in a file opened in WRITE mode') CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP) - ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_BYFIELD_X5',& - TRIM(TPFILE%CNAME)//': invalid fileformat ('//TRIM(TPFILE%CFORMAT)//')') END IF ELSE !Not really necessary but useful to suppress alerts with Valgrind @@ -1116,31 +1047,28 @@ IF (ASSOCIATED(TZFD)) THEN GALLOC = .TRUE. END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) ! !Broadcast header only if IRESP==-111 !because metadata of field has been modified in IO_READ_FIELD_xxx - IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TZFD,TPFIELD) + IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD) ! IF (TPFIELD%CDIR == 'XX' .OR. TPFIELD%CDIR == 'YY') THEN ! XX or YY Scatter Field - CALL SCATTER_XXFIELD(TPFIELD%CDIR,ZFIELDP,PFIELD,TZFD%OWNER,TZFD%COMM) + CALL SCATTER_XXFIELD(TPFIELD%CDIR,ZFIELDP,PFIELD,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) ELSE IF (TPFIELD%CDIR == 'XY') THEN IF (LPACK .AND. L2D) THEN ! 2D compact case - CALL SCATTER_XXFIELD('XX',ZFIELDP(:,1,:,:,:),PFIELD(:,JPHEXT+1,:,:,:),TZFD%OWNER,TZFD%COMM) + CALL SCATTER_XXFIELD('XX',ZFIELDP(:,1,:,:,:),PFIELD(:,JPHEXT+1,:,:,:),TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) PFIELD(:,:,:,:,:) = SPREAD(PFIELD(:,JPHEXT+1,:,:,:),DIM=2,NCOPIES=IHEXTOT) ELSE ! XY Scatter Field - CALL SCATTER_XYFIELD(ZFIELDP,PFIELD,TZFD%OWNER,TZFD%COMM) + CALL SCATTER_XYFIELD(ZFIELDP,PFIELD,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) END IF ELSE - CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MPI_FLOAT,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MPI_FLOAT,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF END IF -ELSE - IRESP = -61 - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_BYFIELD_X5','file '//TRIM(TPFILE%CNAME)//' not found') END IF ! IF (GALLOC) DEALLOCATE (ZFIELDP) @@ -1193,7 +1121,6 @@ REAL,DIMENSION(:,:,:,:,:,:),TARGET,INTENT(INOUT) :: PFIELD ! array containing INTEGER, OPTIONAL, INTENT(OUT) :: KRESP ! return-code ! INTEGER :: IERR -TYPE(FD_ll), POINTER :: TZFD REAL,DIMENSION(:,:,:,:,:,:),POINTER :: ZFIELDP LOGICAL :: GALLOC INTEGER :: IRESP @@ -1206,25 +1133,19 @@ IRESP = 0 ZFIELDP => NULL() ! IHEXTOT = 2*JPHEXT+1 -TZFD=>GETFD(TRIM(ADJUSTL(TPFILE%CNAME))//'.lfi') -IF (ASSOCIATED(TZFD)) THEN +CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_X6',IRESP) +! +IF (IRESP==0) THEN IF (GSMONOPROC) THEN ! sequential execution IF (TPFILE%CFORMAT=='NETCDF4') THEN CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP) ELSE IF (TPFILE%CFORMAT=='LFI') THEN CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP) ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN - !Only detected if CFORMAT='LFICDF4' - !This seems to be allowed for netCDF4 but it is not clean - CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_FIELD_BYFIELD_X6',& - TRIM(TPFILE%CNAME)//': reading in a file opened in WRITE mode') CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP) - ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_BYFIELD_X6',& - TRIM(TPFILE%CNAME)//': invalid fileformat ('//TRIM(TPFILE%CFORMAT)//')') END IF ELSE - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN ! I/O processor case CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,TPFIELD%CDIR,GALLOC) IF (TPFILE%CFORMAT=='NETCDF4') THEN @@ -1232,14 +1153,7 @@ IF (ASSOCIATED(TZFD)) THEN ELSE IF (TPFILE%CFORMAT=='LFI') THEN CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP) ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN - !Only detected if CFORMAT='LFICDF4' - !This seems to be allowed for netCDF4 but it is not clean - CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_FIELD_BYFIELD_X6',& - TRIM(TPFILE%CNAME)//': reading in a file opened in WRITE mode') CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP) - ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_BYFIELD_X6',& - TRIM(TPFILE%CNAME)//': invalid fileformat ('//TRIM(TPFILE%CFORMAT)//')') END IF ELSE !Not really necessary but useful to suppress alerts with Valgrind @@ -1247,25 +1161,22 @@ IF (ASSOCIATED(TZFD)) THEN GALLOC = .TRUE. END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) ! !Broadcast header only if IRESP==-111 !because metadata of field has been modified in IO_READ_FIELD_xxx - IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TZFD,TPFIELD) + IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD) ! IF (TPFIELD%CDIR == 'XX' .OR. TPFIELD%CDIR == 'YY') THEN ! XX or YY Scatter Field - CALL SCATTER_XXFIELD(TPFIELD%CDIR,ZFIELDP,PFIELD,TZFD%OWNER,TZFD%COMM) + CALL SCATTER_XXFIELD(TPFIELD%CDIR,ZFIELDP,PFIELD,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) ELSE IF (TPFIELD%CDIR == 'XY') THEN ! XY Scatter Field - CALL SCATTER_XYFIELD(ZFIELDP,PFIELD,TZFD%OWNER,TZFD%COMM) + CALL SCATTER_XYFIELD(ZFIELDP,PFIELD,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) ELSE - CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MPI_FLOAT,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MPI_FLOAT,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF END IF -ELSE - IRESP = -61 - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_BYFIELD_X6','file '//TRIM(TPFILE%CNAME)//' not found') END IF ! IF (GALLOC) DEALLOCATE (ZFIELDP) @@ -1308,59 +1219,42 @@ INTEGER, INTENT(INOUT) :: KFIELD ! array containing the data field INTEGER,OPTIONAL, INTENT(OUT) :: KRESP ! return-code ! INTEGER :: IERR -TYPE(FD_ll), POINTER :: TZFD INTEGER :: IRESP ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_N0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME)) ! IRESP = 0 ! -TZFD=>GETFD(TRIM(ADJUSTL(TPFILE%CNAME))//'.lfi') -IF (ASSOCIATED(TZFD)) THEN +CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_N0',IRESP) +! +IF (IRESP==0) THEN IF (GSMONOPROC) THEN ! sequential execution IF (TPFILE%CFORMAT=='NETCDF4') THEN CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,KFIELD,IRESP) ELSE IF (TPFILE%CFORMAT=='LFI') THEN CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,KFIELD,IRESP) ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN - !Only detected if CFORMAT='LFICDF4' - !This seems to be allowed for netCDF4 but it is not clean - CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_FIELD_BYFIELD_N0',& - TRIM(TPFILE%CNAME)//': reading in a file opened in WRITE mode') CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,KFIELD,IRESP) - ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_BYFIELD_N0',& - TRIM(TPFILE%CNAME)//': invalid fileformat ('//TRIM(TPFILE%CFORMAT)//')') END IF ELSE - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN IF (TPFILE%CFORMAT=='NETCDF4') THEN CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,KFIELD,IRESP) ELSE IF (TPFILE%CFORMAT=='LFI') THEN CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,KFIELD,IRESP) ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN - !Only detected if CFORMAT='LFICDF4' - !This seems to be allowed for netCDF4 but it is not clean - CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_FIELD_BYFIELD_N0',& - TRIM(TPFILE%CNAME)//': reading in a file opened in WRITE mode') CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,KFIELD,IRESP) - ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_BYFIELD_N0',& - TRIM(TPFILE%CNAME)//': invalid fileformat ('//TRIM(TPFILE%CFORMAT)//')') END IF END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) ! !Broadcast header only if IRESP==-111 !because metadata of field has been modified in IO_READ_FIELD_xxx - IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TZFD,TPFIELD) + IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD) ! - CALL MPI_BCAST(KFIELD,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(KFIELD,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF -ELSE - IRESP = -61 - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_BYFIELD_N0','file '//TRIM(TPFILE%CNAME)//' not found') END IF ! IF (IRESP==-111) IRESP = 0 !-111 is not really an error (metadata has changed) @@ -1404,7 +1298,6 @@ INTEGER,DIMENSION(:),INTENT(INOUT) :: KFIELD ! array containing the data field INTEGER,OPTIONAL, INTENT(OUT) :: KRESP ! return-code ! INTEGER :: IERR -TYPE(FD_ll), POINTER :: TZFD INTEGER :: IRESP INTEGER,DIMENSION(:),POINTER :: IFIELDP LOGICAL :: GALLOC @@ -1415,39 +1308,26 @@ GALLOC = .FALSE. IRESP = 0 IFIELDP => NULL() ! -TZFD=>GETFD(TRIM(ADJUSTL(TPFILE%CNAME))//'.lfi') -IF (ASSOCIATED(TZFD)) THEN +CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_N1',IRESP) +! +IF (IRESP==0) THEN IF (GSMONOPROC) THEN ! sequential execution IF (TPFILE%CFORMAT=='NETCDF4') THEN CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,KFIELD,IRESP) ELSE IF (TPFILE%CFORMAT=='LFI') THEN CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,KFIELD,IRESP) ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN - !Only detected if CFORMAT='LFICDF4' - !This seems to be allowed for netCDF4 but it is not clean - CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_FIELD_BYFIELD_N1',& - TRIM(TPFILE%CNAME)//': reading in a file opened in WRITE mode') CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,KFIELD,IRESP) - ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_BYFIELD_N1',& - TRIM(TPFILE%CNAME)//': invalid fileformat ('//TRIM(TPFILE%CFORMAT)//')') END IF ELSE - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN CALL ALLOCBUFFER_ll(IFIELDP,KFIELD,TPFIELD%CDIR,GALLOC) IF (TPFILE%CFORMAT=='NETCDF4') THEN CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,IFIELDP,IRESP) ELSE IF (TPFILE%CFORMAT=='LFI') THEN CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,IFIELDP,IRESP) ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN - !Only detected if CFORMAT='LFICDF4' - !This seems to be allowed for netCDF4 but it is not clean - CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_FIELD_BYFIELD_N1',& - TRIM(TPFILE%CNAME)//': reading in a file opened in WRITE mode') CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,IFIELDP,IRESP) - ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_BYFIELD_N1',& - TRIM(TPFILE%CNAME)//': invalid fileformat ('//TRIM(TPFILE%CFORMAT)//')') END IF ELSE !Not really necessary but useful to suppress alerts with Valgrind @@ -1455,23 +1335,20 @@ IF (ASSOCIATED(TZFD)) THEN GALLOC = .TRUE. END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) ! !Broadcast header only if IRESP==-111 !because metadata of field has been modified in IO_READ_FIELD_xxx - IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TZFD,TPFIELD) + IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD) ! IF (TPFIELD%CDIR /= 'XX' .AND. TPFIELD%CDIR /='YY') THEN ! Broadcast Field - CALL MPI_BCAST(KFIELD,SIZE(KFIELD),MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(KFIELD,SIZE(KFIELD),MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) ELSE !Scatter Field - CALL SCATTER_XXFIELD(TPFIELD%CDIR,IFIELDP,KFIELD,TZFD%OWNER,TZFD%COMM) + CALL SCATTER_XXFIELD(TPFIELD%CDIR,IFIELDP,KFIELD,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) END IF END IF -ELSE - IRESP = -61 - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_BYFIELD_N1','file '//TRIM(TPFILE%CNAME)//' not found') END IF ! IF (GALLOC) DEALLOCATE (IFIELDP) @@ -1523,7 +1400,6 @@ INTEGER,DIMENSION(:,:),TARGET,INTENT(INOUT) :: KFIELD ! array containing the d INTEGER, OPTIONAL, INTENT(OUT) :: KRESP ! return-code ! INTEGER :: IERR -TYPE(FD_ll), POINTER :: TZFD INTEGER,DIMENSION(:,:),POINTER :: IFIELDP LOGICAL :: GALLOC INTEGER :: IRESP @@ -1536,8 +1412,9 @@ IRESP = 0 IFIELDP => NULL() ! IHEXTOT = 2*JPHEXT+1 -TZFD=>GETFD(TRIM(ADJUSTL(TPFILE%CNAME))//'.lfi') -IF (ASSOCIATED(TZFD)) THEN +CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_N2',IRESP) +! +IF (IRESP==0) THEN IF (GSMONOPROC) THEN ! sequential execution IF (LPACK .AND. L1D .AND. SIZE(KFIELD,1)==IHEXTOT .AND. SIZE(KFIELD,2)==IHEXTOT) THEN IFIELDP=>KFIELD(JPHEXT+1:JPHEXT+1,JPHEXT+1:JPHEXT+1) @@ -1551,14 +1428,7 @@ IF (ASSOCIATED(TZFD)) THEN ELSE IF (TPFILE%CFORMAT=='LFI') THEN CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,IFIELDP,IRESP) ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN - !Only detected if CFORMAT='LFICDF4' - !This seems to be allowed for netCDF4 but it is not clean - CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_FIELD_BYFIELD_N2',& - TRIM(TPFILE%CNAME)//': reading in a file opened in WRITE mode') CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,IFIELDP,IRESP) - ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_BYFIELD_N2',& - TRIM(TPFILE%CNAME)//': invalid fileformat ('//TRIM(TPFILE%CFORMAT)//')') END IF IF (LPACK .AND. L1D .AND. SIZE(KFIELD,1)==IHEXTOT .AND. SIZE(KFIELD,2)==IHEXTOT) THEN KFIELD(:,:)=SPREAD(SPREAD(KFIELD(JPHEXT+1,JPHEXT+1),DIM=1,NCOPIES=IHEXTOT),DIM=2,NCOPIES=IHEXTOT) @@ -1566,7 +1436,7 @@ IF (ASSOCIATED(TZFD)) THEN KFIELD(:,:)=SPREAD(KFIELD(:,JPHEXT+1),DIM=2,NCOPIES=IHEXTOT) END IF ELSE - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN ! I/O processor case CALL ALLOCBUFFER_ll(IFIELDP,KFIELD,TPFIELD%CDIR,GALLOC) IF (TPFILE%CFORMAT=='NETCDF4') THEN @@ -1574,14 +1444,7 @@ IF (ASSOCIATED(TZFD)) THEN ELSE IF (TPFILE%CFORMAT=='LFI') THEN CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,IFIELDP,IRESP) ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN - !Only detected if CFORMAT='LFICDF4' - !This seems to be allowed for netCDF4 but it is not clean - CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_FIELD_BYFIELD_N2',& - TRIM(TPFILE%CNAME)//': reading in a file opened in WRITE mode') CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,IFIELDP,IRESP) - ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_BYFIELD_N2',& - TRIM(TPFILE%CNAME)//': invalid fileformat ('//TRIM(TPFILE%CFORMAT)//')') END IF ELSE !Not really necessary but useful to suppress alerts with Valgrind @@ -1589,34 +1452,31 @@ IF (ASSOCIATED(TZFD)) THEN GALLOC = .TRUE. END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) ! !Broadcast header only if IRESP==-111 !because metadata of field has been modified in IO_READ_FIELD_xxx - IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TZFD,TPFIELD) + IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD) ! IF (TPFIELD%CDIR == 'XX' .OR. TPFIELD%CDIR == 'YY') THEN ! XX or YY Scatter Field - CALL SCATTER_XXFIELD(TPFIELD%CDIR,IFIELDP,KFIELD,TZFD%OWNER,TZFD%COMM) + CALL SCATTER_XXFIELD(TPFIELD%CDIR,IFIELDP,KFIELD,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) ! Broadcast Field - CALL MPI_BCAST(KFIELD,SIZE(KFIELD),MPI_FLOAT,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(KFIELD,SIZE(KFIELD),MPI_FLOAT,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) ELSE IF (TPFIELD%CDIR == 'XY') THEN IF (LPACK .AND. L2D) THEN ! 2D compact case - CALL SCATTER_XXFIELD('XX',IFIELDP(:,1),KFIELD(:,JPHEXT+1),TZFD%OWNER,TZFD%COMM) + CALL SCATTER_XXFIELD('XX',IFIELDP(:,1),KFIELD(:,JPHEXT+1),TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) KFIELD(:,:) = SPREAD(KFIELD(:,JPHEXT+1),DIM=2,NCOPIES=IHEXTOT) ELSE ! XY Scatter Field - CALL SCATTER_XYFIELD(IFIELDP,KFIELD,TZFD%OWNER,TZFD%COMM) + CALL SCATTER_XYFIELD(IFIELDP,KFIELD,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) END IF ELSE - IF (ISP == TZFD%OWNER) KFIELD = IFIELDP - CALL MPI_BCAST(KFIELD,SIZE(KFIELD),MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) + IF (ISP == TPFILE%NMASTER_RANK) KFIELD = IFIELDP + CALL MPI_BCAST(KFIELD,SIZE(KFIELD),MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF END IF -ELSE - IRESP = -61 - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_BYFIELD_N2','file '//TRIM(TPFILE%CNAME)//' not found') END IF ! IF (GALLOC) DEALLOCATE (IFIELDP) @@ -1659,59 +1519,42 @@ LOGICAL, INTENT(INOUT) :: OFIELD ! array containing the data field INTEGER,OPTIONAL, INTENT(OUT) :: KRESP ! return-code ! INTEGER :: IERR -TYPE(FD_ll), POINTER :: TZFD INTEGER :: IRESP ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_L0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME)) ! IRESP = 0 ! -TZFD=>GETFD(TRIM(ADJUSTL(TPFILE%CNAME))//'.lfi') -IF (ASSOCIATED(TZFD)) THEN +CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_L0',IRESP) +! +IF (IRESP==0) THEN IF (GSMONOPROC) THEN ! sequential execution IF (TPFILE%CFORMAT=='NETCDF4') THEN CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,OFIELD,IRESP) ELSE IF (TPFILE%CFORMAT=='LFI') THEN CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,OFIELD,IRESP) ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN - !Only detected if CFORMAT='LFICDF4' - !This seems to be allowed for netCDF4 but it is not clean - CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_FIELD_BYFIELD_L0',& - TRIM(TPFILE%CNAME)//': reading in a file opened in WRITE mode') CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,OFIELD,IRESP) - ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_BYFIELD_L0',& - TRIM(TPFILE%CNAME)//': invalid fileformat ('//TRIM(TPFILE%CFORMAT)//')') END IF ELSE - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN IF (TPFILE%CFORMAT=='NETCDF4') THEN CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,OFIELD,IRESP) ELSE IF (TPFILE%CFORMAT=='LFI') THEN CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,OFIELD,IRESP) ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN - !Only detected if CFORMAT='LFICDF4' - !This seems to be allowed for netCDF4 but it is not clean - CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_FIELD_BYFIELD_L0',& - TRIM(TPFILE%CNAME)//': reading in a file opened in WRITE mode') CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,OFIELD,IRESP) - ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_BYFIELD_L0',& - TRIM(TPFILE%CNAME)//': invalid fileformat ('//TRIM(TPFILE%CFORMAT)//')') END IF END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) ! !Broadcast header only if IRESP==-111 !because metadata of field has been modified in IO_READ_FIELD_xxx - IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TZFD,TPFIELD) + IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD) ! - CALL MPI_BCAST(OFIELD,1,MPI_LOGICAL,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(OFIELD,1,MPI_LOGICAL,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF -ELSE - IRESP = -61 - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_BYFIELD_L0','file '//TRIM(TPFILE%CNAME)//' not found') END IF ! IF (IRESP==-111) IRESP = 0 !-111 is not really an error (metadata has changed) @@ -1752,59 +1595,42 @@ LOGICAL,DIMENSION(:),INTENT(INOUT) :: OFIELD ! array containing the data field INTEGER,OPTIONAL, INTENT(OUT) :: KRESP ! return-code ! INTEGER :: IERR -TYPE(FD_ll), POINTER :: TZFD INTEGER :: IRESP ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_L1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME)) ! IRESP = 0 ! -TZFD=>GETFD(TRIM(ADJUSTL(TPFILE%CNAME))//'.lfi') -IF (ASSOCIATED(TZFD)) THEN +CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_L1',IRESP) +! +IF (IRESP==0) THEN IF (GSMONOPROC) THEN ! sequential execution IF (TPFILE%CFORMAT=='NETCDF4') THEN CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,OFIELD,IRESP) ELSE IF (TPFILE%CFORMAT=='LFI') THEN CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,OFIELD,IRESP) ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN - !Only detected if CFORMAT='LFICDF4' - !This seems to be allowed for netCDF4 but it is not clean - CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_FIELD_BYFIELD_L1',& - TRIM(TPFILE%CNAME)//': reading in a file opened in WRITE mode') CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,OFIELD,IRESP) - ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_BYFIELD_L1',& - TRIM(TPFILE%CNAME)//': invalid fileformat ('//TRIM(TPFILE%CFORMAT)//')') END IF ELSE - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN IF (TPFILE%CFORMAT=='NETCDF4') THEN CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,OFIELD,IRESP) ELSE IF (TPFILE%CFORMAT=='LFI') THEN CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,OFIELD,IRESP) ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN - !Only detected if CFORMAT='LFICDF4' - !This seems to be allowed for netCDF4 but it is not clean - CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_FIELD_BYFIELD_L1',& - TRIM(TPFILE%CNAME)//': reading in a file opened in WRITE mode') CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,OFIELD,IRESP) - ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_BYFIELD_L1',& - TRIM(TPFILE%CNAME)//': invalid fileformat ('//TRIM(TPFILE%CFORMAT)//')') END IF END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) ! !Broadcast header only if IRESP==-111 !because metadata of field has been modified in IO_READ_FIELD_xxx - IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TZFD,TPFIELD) + IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD) ! - CALL MPI_BCAST(OFIELD,SIZE(OFIELD),MPI_LOGICAL,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(OFIELD,SIZE(OFIELD),MPI_LOGICAL,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF -ELSE - IRESP = -61 - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_BYFIELD_L1','file '//TRIM(TPFILE%CNAME)//' not found') END IF ! IF (IRESP==-111) IRESP = 0 !-111 is not really an error (metadata has changed) @@ -1845,59 +1671,42 @@ CHARACTER(LEN=*), INTENT(INOUT) :: HFIELD ! array containing the data field INTEGER,OPTIONAL, INTENT(OUT) :: KRESP ! return-code ! INTEGER :: IERR -TYPE(FD_ll), POINTER :: TZFD INTEGER :: IRESP ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_C0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME)) ! IRESP = 0 ! -TZFD=>GETFD(TRIM(ADJUSTL(TPFILE%CNAME))//'.lfi') -IF (ASSOCIATED(TZFD)) THEN +CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_C0',IRESP) +! +IF (IRESP==0) THEN IF (GSMONOPROC) THEN ! sequential execution IF (TPFILE%CFORMAT=='NETCDF4') THEN CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,HFIELD,IRESP) ELSE IF (TPFILE%CFORMAT=='LFI') THEN CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,HFIELD,IRESP) ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN - !Only detected if CFORMAT='LFICDF4' - !This seems to be allowed for netCDF4 but it is not clean - CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_FIELD_BYFIELD_C0',& - TRIM(TPFILE%CNAME)//': reading in a file opened in WRITE mode') CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,HFIELD,IRESP) - ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_BYFIELD_C0',& - TRIM(TPFILE%CNAME)//': invalid fileformat ('//TRIM(TPFILE%CFORMAT)//')') END IF ELSE - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN IF (TPFILE%CFORMAT=='NETCDF4') THEN CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,HFIELD,IRESP) ELSE IF (TPFILE%CFORMAT=='LFI') THEN CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,HFIELD,IRESP) ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN - !Only detected if CFORMAT='LFICDF4' - !This seems to be allowed for netCDF4 but it is not clean - CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_FIELD_BYFIELD_C0',& - TRIM(TPFILE%CNAME)//': reading in a file opened in WRITE mode') CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,HFIELD,IRESP) - ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_BYFIELD_C0',& - TRIM(TPFILE%CNAME)//': invalid fileformat ('//TRIM(TPFILE%CFORMAT)//')') END IF END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) ! !Broadcast header only if IRESP==-111 !because metadata of field has been modified in IO_READ_FIELD_xxx - IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TZFD,TPFIELD) + IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD) ! - CALL MPI_BCAST(HFIELD,LEN(HFIELD),MPI_CHARACTER,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(HFIELD,LEN(HFIELD),MPI_CHARACTER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF -ELSE - IRESP = -61 - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_BYFIELD_C0','file '//TRIM(TPFILE%CNAME)//' not found') END IF ! IF (IRESP==-111) IRESP = 0 !-111 is not really an error (metadata has changed) @@ -1938,7 +1747,6 @@ TYPE (DATE_TIME), INTENT(INOUT) :: TPDATA ! array containing the data field INTEGER,OPTIONAL, INTENT(OUT) :: KRESP ! return-code ! INTEGER :: IERR -TYPE(FD_ll), POINTER :: TZFD INTEGER :: IRESP INTEGER,DIMENSION(3) :: ITDATE ! @@ -1946,59 +1754,43 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_T0',TRIM(TPFILE%CNAME)//' ! IRESP = 0 ! -TZFD=>GETFD(TRIM(ADJUSTL(TPFILE%CNAME))//'.lfi') -IF (ASSOCIATED(TZFD)) THEN +CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_T0',IRESP) +! +IF (IRESP==0) THEN IF (GSMONOPROC) THEN ! sequential execution IF (TPFILE%CFORMAT=='NETCDF4') THEN CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,TPDATA,IRESP) ELSE IF (TPFILE%CFORMAT=='LFI') THEN CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,TPDATA,IRESP) ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN - !Only detected if CFORMAT='LFICDF4' - !This seems to be allowed for netCDF4 but it is not clean - CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_FIELD_BYFIELD_T0',& - TRIM(TPFILE%CNAME)//': reading in a file opened in WRITE mode') CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,TPDATA,IRESP) - ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_BYFIELD_T0',& - TRIM(TPFILE%CNAME)//': invalid fileformat ('//TRIM(TPFILE%CFORMAT)//')') END IF ELSE - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN IF (TPFILE%CFORMAT=='NETCDF4') THEN CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,TPDATA,IRESP) ELSE IF (TPFILE%CFORMAT=='LFI') THEN CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,TPDATA,IRESP) ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN - !Only detected if CFORMAT='LFICDF4' - !This seems to be allowed for netCDF4 but it is not clean - CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_FIELD_BYFIELD_T0',& - TRIM(TPFILE%CNAME)//': reading in a file opened in WRITE mode') CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,TPDATA,IRESP) - ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_BYFIELD_T0',& - TRIM(TPFILE%CNAME)//': invalid fileformat ('//TRIM(TPFILE%CFORMAT)//')') END IF ITDATE(1) = TPDATA%TDATE%YEAR ITDATE(2) = TPDATA%TDATE%MONTH ITDATE(3) = TPDATA%TDATE%DAY END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) ! !Broadcast header only if IRESP==-111 !because metadata of field has been modified in IO_READ_FIELD_xxx - IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TZFD,TPFIELD) + IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD) ! - CALL MPI_BCAST(ITDATE, 3,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) - CALL MPI_BCAST(TPDATA%TIME,1,MPI_FLOAT, TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(ITDATE, 3,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) + CALL MPI_BCAST(TPDATA%TIME,1,MPI_FLOAT, TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) TPDATA%TDATE%YEAR = ITDATE(1) TPDATA%TDATE%MONTH = ITDATE(2) TPDATA%TDATE%DAY = ITDATE(3) END IF -ELSE - IRESP = -61 - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_BYFIELD_T0','file '//TRIM(TPFILE%CNAME)//' not found') END IF ! IF (IRESP==-111) IRESP = 0 !-111 is not really an error (metadata has changed) @@ -2069,7 +1861,6 @@ REAL,DIMENSION(:,:,:),ALLOCATABLE,TARGET :: Z3D REAL,DIMENSION(:,:,:), POINTER :: TX3DP REAL(KIND=8),DIMENSION(2) :: T0,T1,T2,T3 REAL(KIND=8),DIMENSION(2) :: T11,T22 -TYPE(FD_ll), POINTER :: TZFD TYPE(TX_3DP),ALLOCATABLE,DIMENSION(:) :: T_TX3DP ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_LB','reading '//TRIM(TPFIELD%CMNHNAME)) @@ -2088,8 +1879,9 @@ CALL SECOND_MNH2(T11) IRESP = 0 !------------------------------------------------------------------ IHEXTOT = 2*JPHEXT+1 -TZFD=>GETFD(TRIM(ADJUSTL(TPFILE%CNAME))//'.lfi') -IF (ASSOCIATED(TZFD)) THEN +CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_LB',IRESP) +! +IF (IRESP==0) THEN IF (GSMONOPROC) THEN ! sequential execution IF (YLBTYPE == 'LBX' .OR. YLBTYPE == 'LBXU') THEN ALLOCATE(Z3D(KL3D,SIZE(PLB,2),SIZE(PLB,3))) @@ -2109,14 +1901,7 @@ IF (ASSOCIATED(TZFD)) THEN ELSE IF (TPFILE%CFORMAT=='LFI') THEN CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,TX3DP,IRESP) ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN - !Only detected if CFORMAT='LFICDF4' - !This seems to be allowed for netCDF4 but it is not clean - CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_FIELD_BYFIELD_LB',& - TRIM(TPFILE%CNAME)//': reading in a file opened in WRITE mode') CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,TX3DP,IRESP) - ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_BYFIELD_LB',& - TRIM(TPFILE%CNAME)//': invalid fileformat ('//TRIM(TPFILE%CFORMAT)//')') END IF IF (YLBTYPE == 'LBX' .OR. YLBTYPE == 'LBXU') THEN IF (LPACK .AND. L2D) Z3D(:,:,:) = SPREAD(Z3D(:,JPHEXT+1,:),DIM=2,NCOPIES=IHEXTOT) @@ -2127,7 +1912,7 @@ IF (ASSOCIATED(TZFD)) THEN PLB(:,KRIM+JPHEXT+1:2*(KRIM+JPHEXT),:) = Z3D(:,KL3D-KRIM-JPHEXT+1:KL3D,:) END IF ELSE ! multiprocessor execution - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN CALL SECOND_MNH2(T0) CALL GET_GLOBALDIMS_ll(IIMAX_ll,IJMAX_ll) IF (YLBTYPE == 'LBX' .OR. YLBTYPE == 'LBXU') THEN @@ -2148,14 +1933,7 @@ IF (ASSOCIATED(TZFD)) THEN ELSE IF (TPFILE%CFORMAT=='LFI') THEN CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,TX3DP,IRESP) ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN - !Only detected if CFORMAT='LFICDF4' - !This seems to be allowed for netCDF4 but it is not clean - CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_FIELD_BYFIELD_LB',& - TRIM(TPFILE%CNAME)//': reading in a file opened in WRITE mode') CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,TX3DP,IRESP) - ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_BYFIELD_LB',& - TRIM(TPFILE%CNAME)//': invalid fileformat ('//TRIM(TPFILE%CFORMAT)//')') END IF IF (YLBTYPE == 'LBX' .OR. YLBTYPE == 'LBXU') THEN IF (LPACK .AND. L2D) Z3D(:,:,:) = SPREAD(Z3D(:,JPHEXT+1,:),DIM=2,NCOPIES=IHEXTOT) @@ -2169,16 +1947,16 @@ IF (ASSOCIATED(TZFD)) THEN TIMEZ%T_READLB_READ=TIMEZ%T_READLB_READ + T1 - T0 END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) ! !Broadcast header only if IRESP==-111 !because metadata of field has been modified in IO_READ_FIELD_xxx - IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TZFD,TPFIELD) + IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD) ! NB_REQ=0 ALLOCATE(REQ_TAB(ISNPROC-1)) !REQ_TAB=MPI_REQUEST_NULL - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN CALL SECOND_MNH2(T1) !ALLOCATE(REQ_TAB(ISNPROC-1)) !REQ_TAB=MPI_REQUEST_NULL @@ -2192,8 +1970,8 @@ IF (ASSOCIATED(TZFD)) THEN NB_REQ = NB_REQ + 1 ALLOCATE(T_TX3DP(NB_REQ)%X(IIB:IIE,IJB:IJE,IKU)) T_TX3DP(NB_REQ)%X=Z3D(IIB:IIE,IJB:IJE,:) - CALL MPI_ISEND(T_TX3DP(NB_REQ)%X,SIZE(TX3DP),MPI_FLOAT,JI-1,99,TZFD%COMM,REQ_TAB(NB_REQ),IERR) - !CALL MPI_BSEND(T_TX3DP(NB_REQ)%X,SIZE(TX3DP),MPI_FLOAT,JI-1,99,TZFD%COMM,IERR) + CALL MPI_ISEND(T_TX3DP(NB_REQ)%X,SIZE(TX3DP),MPI_FLOAT,JI-1,99,TPFILE%NMPICOMM,REQ_TAB(NB_REQ),IERR) + !CALL MPI_BSEND(T_TX3DP(NB_REQ)%X,SIZE(TX3DP),MPI_FLOAT,JI-1,99,TPFILE%NMPICOMM,IERR) ELSE CALL GET_DISTRIB_LB(YLBTYPE,JI,'LOC','READ',KRIM,IIB,IIE,IJB,IJE) PLB(IIB:IIE,IJB:IJE,:) = TX3DP(:,:,:) @@ -2220,9 +1998,9 @@ IF (ASSOCIATED(TZFD)) THEN CALL GET_DISTRIB_LB(YLBTYPE,ISP,'LOC','READ',KRIM,IIB,IIE,IJB,IJE) IF (IIB /= 0) THEN TX3DP=>PLB(IIB:IIE,IJB:IJE,:) - CALL MPI_RECV(TX3DP,SIZE(TX3DP),MPI_FLOAT,TZFD%OWNER-1,99,TZFD%COMM,STATUS,IERR) + CALL MPI_RECV(TX3DP,SIZE(TX3DP),MPI_FLOAT,TPFILE%NMASTER_RANK-1,99,TPFILE%NMPICOMM,STATUS,IERR) !NB_REQ = NB_REQ + 1 - !CALL MPI_IRECV(TX3DP,SIZE(TX3DP),MPI_FLOAT,TZFD%OWNER-1,99,TZFD%COMM,REQ_TAB(NB_REQ),IERR) + !CALL MPI_IRECV(TX3DP,SIZE(TX3DP),MPI_FLOAT,TPFILE%NMASTER_RANK-1,99,TPFILE%NMPICOMM,REQ_TAB(NB_REQ),IERR) !IF (NB_REQ .GT.0 ) CALL MPI_WAITALL(NB_REQ,REQ_TAB,MNH_STATUSES_IGNORE,IERR) END IF CALL SECOND_MNH2(T1) @@ -2230,9 +2008,6 @@ IF (ASSOCIATED(TZFD)) THEN END IF DEALLOCATE(REQ_TAB) END IF !(GSMONOPROC) -ELSE - IRESP = -61 - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_BYFIELD_LB','file '//TRIM(TPFILE%CNAME)//' not found') END IF !---------------------------------------------------------------- ! diff --git a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 index 9915319f2..29a82e335 100644 --- a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 +++ b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 @@ -380,12 +380,12 @@ CONTAINS IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP) IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,PFIELD,IRESP) ELSE ! multiprocessor execution - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP) IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,PFIELD,IRESP) END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF ! multiprocessor execution IF (TZFD%nb_procio.gt.1) THEN ! write the data in all Z files @@ -503,9 +503,9 @@ CONTAINS IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,PFIELD,IRESP) ELSE ! multiprocessor execution #ifndef MNH_INT8 - CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TZFD%COMM,IRESP) + CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP) #else - CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TZFD%COMM,IRESP) + CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP) #endif IF (ISIZEMAX==0) THEN CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_X1','ignoring variable with a zero size ('//TRIM(YRECFM)//')') @@ -513,7 +513,7 @@ CONTAINS RETURN END IF - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,YDIR,GALLOC) ELSE ALLOCATE(ZFIELDP(0)) @@ -521,15 +521,15 @@ CONTAINS END IF ! IF (YDIR == 'XX' .OR. YDIR =='YY') THEN - CALL GATHER_XXFIELD(YDIR,PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM) + CALL GATHER_XXFIELD(YDIR,PFIELD,ZFIELDP,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) END IF ! - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP) IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,ZFIELDP,IRESP) END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF ! multiprocessor execution ELSE IRESP = -61 @@ -658,9 +658,9 @@ CONTAINS ELSE ! multiprocessor execution CALL SECOND_MNH2(T0) #ifndef MNH_INT8 - CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TZFD%COMM,IRESP) + CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP) #else - CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TZFD%COMM,IRESP) + CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP) #endif IF (ISIZEMAX==0) THEN CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_X2','ignoring variable with a zero size ('//TRIM(YRECFM)//')') @@ -668,7 +668,7 @@ CONTAINS RETURN END IF - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN ! I/O processor case CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,YDIR,GALLOC) ELSE @@ -677,10 +677,10 @@ CONTAINS END IF ! IF (YDIR == 'XX' .OR. YDIR =='YY') THEN - CALL GATHER_XXFIELD(YDIR,PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM) + CALL GATHER_XXFIELD(YDIR,PFIELD,ZFIELDP,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) ELSEIF (YDIR == 'XY') THEN IF (LPACK .AND. L2D) THEN - CALL GATHER_XXFIELD('XX',PFIELD(:,JPHEXT+1),ZFIELDP(:,1),TZFD%OWNER,TZFD%COMM) + CALL GATHER_XXFIELD('XX',PFIELD(:,JPHEXT+1),ZFIELDP(:,1),TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) ELSE #ifdef MNH_GA ! @@ -697,7 +697,7 @@ CONTAINS !!$ " NIXO_L=",NIXO_L,"NIYO_L=",NIYO_L," ld_col=",ld_col," ISP=",ISP call ga_sync DEALLOCATE (ZFIELD_GA) - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN ! ! this proc get the Z slide to write ! @@ -710,8 +710,8 @@ CONTAINS END IF !!$ call ga_sync #else - CALL GATHER_XYFIELD(PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM) -!!$ IF (ISP == TZFD%OWNER) THEN + CALL GATHER_XYFIELD(PFIELD,ZFIELDP,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) +!!$ IF (ISP == TPFILE%NMASTER_RANK) THEN !!$ print*,YRECFM, "ERR=", MAXVAL (ZFIELDP_GA - ZFIELDP) !!$ DO JI=1,IJU_ll !!$ !print*,YRECFM, "ERR=", ZFIELDP_GA(:,JI) - ZFIELDP(:,JI) @@ -725,7 +725,7 @@ CONTAINS CALL SECOND_MNH2(T1) TIMEZ%T_WRIT2D_GATH=TIMEZ%T_WRIT2D_GATH + T1 - T0 ! - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP) IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,ZFIELDP,IRESP) END IF @@ -740,8 +740,7 @@ CONTAINS CALL SECOND_MNH2(T2) TIMEZ%T_WRIT2D_WRIT=TIMEZ%T_WRIT2D_WRIT + T2 - T1 ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD& - & %COMM,IERR) + CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF ELSE IRESP = -61 @@ -755,7 +754,7 @@ CONTAINS END IF IF (GALLOC) DEALLOCATE(ZFIELDP) IF (PRESENT(KRESP)) KRESP = IRESP - IF (ASSOCIATED(TZFD)) CALL MPI_BARRIER(TZFD%COMM,IERR) + IF (ASSOCIATED(TZFD)) CALL MPI_BARRIER(TPFILE%NMPICOMM,IERR) CALL SECOND_MNH2(T22) TIMEZ%T_WRIT2D_ALL=TIMEZ%T_WRIT2D_ALL + T22 - T11 END SUBROUTINE IO_WRITE_FIELD_BYFIELD_X2 @@ -892,9 +891,9 @@ CONTAINS END IF ELSEIF ( (TZFD%nb_procio .eq. 1 ) .OR. ( YDIR == '--' ) ) THEN ! multiprocessor execution & 1 proc IO #ifndef MNH_INT8 - CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TZFD%COMM,IRESP) + CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP) #else - CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TZFD%COMM,IRESP) + CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP) #endif IF (ISIZEMAX==0) THEN CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_X3','ignoring variable with a zero size ('//TRIM(YRECFM)//')') @@ -903,7 +902,7 @@ CONTAINS END IF ! write 3D field in 1 time = output for graphique - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,YDIR,GALLOC) ELSE ALLOCATE(ZFIELDP(0,0,0)) @@ -911,28 +910,27 @@ CONTAINS END IF ! IF (YDIR == 'XX' .OR. YDIR =='YY') THEN - CALL GATHER_XXFIELD(YDIR,PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM) + CALL GATHER_XXFIELD(YDIR,PFIELD,ZFIELDP,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) ELSEIF (YDIR == 'XY') THEN IF (LPACK .AND. L2D) THEN - CALL GATHER_XXFIELD('XX',PFIELD(:,JPHEXT+1,:),ZFIELDP(:,1,:),TZFD%OWNER,TZFD%COMM) + CALL GATHER_XXFIELD('XX',PFIELD(:,JPHEXT+1,:),ZFIELDP(:,1,:),TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) ELSE - CALL GATHER_XYFIELD(PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM) + CALL GATHER_XYFIELD(PFIELD,ZFIELDP,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) END IF END IF ! - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP) IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,ZFIELDP,IRESP) END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD& - & %COMM,IERR) + CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) ! ELSE ! multiprocessor execution & // IO #ifndef MNH_INT8 - CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TZFD%COMM,IRESP) + CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP) #else - CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TZFD%COMM,IRESP) + CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP) #endif IF (ISIZEMAX==0) THEN CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_X3','ignoring variable with a zero size ('//TRIM(YRECFM)//')') @@ -1044,11 +1042,11 @@ CONTAINS ! IF (YDIR == 'XX' .OR. YDIR =='YY') THEN STOP " XX NON PREVU SUR BG POUR LE MOMENT " - CALL GATHER_XXFIELD(YDIR,PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM) + CALL GATHER_XXFIELD(YDIR,PFIELD,ZFIELDP,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) ELSEIF (YDIR == 'XY') THEN IF (LPACK .AND. L2D) THEN STOP " L2D NON PREVU SUR BG POUR LE MOMENT " - CALL GATHER_XXFIELD('XX',PFIELD(:,JPHEXT+1,:),ZFIELDP(:,1,:),TZFD%OWNER,TZFD%COMM) + CALL GATHER_XXFIELD('XX',PFIELD(:,JPHEXT+1,:),ZFIELDP(:,1,:),TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) ELSE !CALL GATHER_XYFIELD(ZSLIDE,ZSLIDE_ll,TZFD_IOZ%OWNER,TZFD_IOZ%COMM) !JUANIOZ @@ -1153,7 +1151,7 @@ CONTAINS IF (GALLOC_ll) DEALLOCATE(ZSLIDE_ll) !IF (Associated(ZSLIDE_ll)) DEALLOCATE(ZSLIDE_ll) IF (PRESENT(KRESP)) KRESP = IRESP - IF (ASSOCIATED(TZFD)) CALL MPI_BARRIER(TZFD%COMM,IERR) + IF (ASSOCIATED(TZFD)) CALL MPI_BARRIER(TPFILE%NMPICOMM,IERR) CALL SECOND_MNH2(T22) TIMEZ%T_WRIT3D_ALL=TIMEZ%T_WRIT3D_ALL + T22 - T11 END SUBROUTINE IO_WRITE_FIELD_BYFIELD_X3 @@ -1254,9 +1252,9 @@ CONTAINS END IF ELSE #ifndef MNH_INT8 - CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TZFD%COMM,IRESP) + CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP) #else - CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TZFD%COMM,IRESP) + CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP) #endif IF (ISIZEMAX==0) THEN CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_X4','ignoring variable with a zero size ('//TRIM(YRECFM)//')') @@ -1264,7 +1262,7 @@ CONTAINS RETURN END IF - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,YDIR,GALLOC) ELSE ALLOCATE(ZFIELDP(0,0,0,0)) @@ -1272,21 +1270,21 @@ CONTAINS END IF ! IF (YDIR == 'XX' .OR. YDIR =='YY') THEN - CALL GATHER_XXFIELD(YDIR,PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM) + CALL GATHER_XXFIELD(YDIR,PFIELD,ZFIELDP,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) ELSEIF (YDIR == 'XY') THEN IF (LPACK .AND. L2D) THEN - CALL GATHER_XXFIELD('XX',PFIELD(:,JPHEXT+1,:,:),ZFIELDP(:,1,:,:),TZFD%OWNER,TZFD%COMM) + CALL GATHER_XXFIELD('XX',PFIELD(:,JPHEXT+1,:,:),ZFIELDP(:,1,:,:),TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) ELSE - CALL GATHER_XYFIELD(PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM) + CALL GATHER_XYFIELD(PFIELD,ZFIELDP,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) END IF END IF ! - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP) IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,ZFIELDP,IRESP) END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF ! multiprocessor execution ELSE IRESP = -61 @@ -1398,9 +1396,9 @@ CONTAINS END IF ELSE #ifndef MNH_INT8 - CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TZFD%COMM,IRESP) + CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP) #else - CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TZFD%COMM,IRESP) + CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP) #endif IF (ISIZEMAX==0) THEN CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_X5','ignoring variable with a zero size ('//TRIM(YRECFM)//')') @@ -1408,7 +1406,7 @@ CONTAINS RETURN END IF - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,YDIR,GALLOC) ELSE ALLOCATE(ZFIELDP(0,0,0,0,0)) @@ -1416,22 +1414,22 @@ CONTAINS END IF ! IF (YDIR == 'XX' .OR. YDIR =='YY') THEN - CALL GATHER_XXFIELD(YDIR,PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM) + CALL GATHER_XXFIELD(YDIR,PFIELD,ZFIELDP,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) ELSEIF (YDIR == 'XY') THEN IF (LPACK .AND. L2D) THEN CALL GATHER_XXFIELD('XX',PFIELD(:,JPHEXT+1,:,:,:),ZFIELDP(:,1,:,:,:),& - & TZFD%OWNER,TZFD%COMM) + & TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) ELSE - CALL GATHER_XYFIELD(PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM) + CALL GATHER_XYFIELD(PFIELD,ZFIELDP,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) END IF END IF ! - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP) IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,ZFIELDP,IRESP) END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF ! multiprocessor execution ELSE IRESP = -61 @@ -1532,9 +1530,9 @@ CONTAINS IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,PFIELD,IRESP) ELSE #ifndef MNH_INT8 - CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TZFD%COMM,IRESP) + CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP) #else - CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TZFD%COMM,IRESP) + CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP) #endif IF (ISIZEMAX==0) THEN CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_X6','ignoring variable with a zero size ('//TRIM(YRECFM)//')') @@ -1542,7 +1540,7 @@ CONTAINS RETURN END IF - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,YDIR,GALLOC) ELSE ALLOCATE(ZFIELDP(0,0,0,0,0,0)) @@ -1550,17 +1548,17 @@ CONTAINS END IF ! IF (YDIR == 'XX' .OR. YDIR =='YY') THEN - CALL GATHER_XXFIELD(YDIR,PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM) + CALL GATHER_XXFIELD(YDIR,PFIELD,ZFIELDP,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) ELSEIF (YDIR == 'XY') THEN - CALL GATHER_XYFIELD(PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM) + CALL GATHER_XYFIELD(PFIELD,ZFIELDP,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) END IF ! - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP) IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,ZFIELDP,IRESP) END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF ! multiprocessor execution ELSE IRESP = -61 @@ -1645,12 +1643,12 @@ CONTAINS IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,KFIELD,IRESP) IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,KFIELD,IRESP) ELSE - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,KFIELD,IRESP) IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,KFIELD,IRESP) END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF ! multiprocessor execution IF (TZFD%nb_procio.gt.1) THEN ! write the data in all Z files @@ -1763,9 +1761,9 @@ CONTAINS IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,KFIELD,IRESP) ELSE ! multiprocessor execution #ifndef MNH_INT8 - CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TZFD%COMM,IRESP) + CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP) #else - CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TZFD%COMM,IRESP) + CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP) #endif IF (ISIZEMAX==0) THEN CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_N1','ignoring variable with a zero size ('//TRIM(YRECFM)//')') @@ -1773,7 +1771,7 @@ CONTAINS RETURN END IF - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN CALL ALLOCBUFFER_ll(IFIELDP,KFIELD,YDIR,GALLOC) ELSE ALLOCATE(IFIELDP(0)) @@ -1781,15 +1779,15 @@ CONTAINS END IF ! IF (YDIR == 'XX' .OR. YDIR =='YY') THEN - CALL GATHER_XXFIELD(YDIR,KFIELD,IFIELDP,TZFD%OWNER,TZFD%COMM) + CALL GATHER_XXFIELD(YDIR,KFIELD,IFIELDP,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) END IF ! - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,IFIELDP,IRESP) IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,IFIELDP,IRESP) END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF ELSE IRESP = -61 @@ -1803,7 +1801,7 @@ CONTAINS END IF IF (GALLOC) DEALLOCATE(IFIELDP) IF (PRESENT(KRESP)) KRESP = IRESP - IF (ASSOCIATED(TZFD)) CALL MPI_BARRIER(TZFD%COMM,IERR) + IF (ASSOCIATED(TZFD)) CALL MPI_BARRIER(TPFILE%NMPICOMM,IERR) ! END SUBROUTINE IO_WRITE_FIELD_BYFIELD_N1 @@ -1908,9 +1906,9 @@ CONTAINS END IF ELSE ! multiprocessor execution #ifndef MNH_INT8 - CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TZFD%COMM,IRESP) + CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP) #else - CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TZFD%COMM,IRESP) + CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP) #endif IF (ISIZEMAX==0) THEN CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_N2','ignoring variable with a zero size ('//TRIM(YRECFM)//')') @@ -1919,7 +1917,7 @@ CONTAINS END IF CALL SECOND_MNH2(T0) - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN ! I/O processor case CALL ALLOCBUFFER_ll(IFIELDP,KFIELD,YDIR,GALLOC) ELSE @@ -1928,25 +1926,25 @@ CONTAINS END IF ! IF (YDIR == 'XX' .OR. YDIR =='YY') THEN - CALL GATHER_XXFIELD(YDIR,KFIELD,IFIELDP,TZFD%OWNER,TZFD%COMM) + CALL GATHER_XXFIELD(YDIR,KFIELD,IFIELDP,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) ELSEIF (YDIR == 'XY') THEN IF (LPACK .AND. L2D) THEN - CALL GATHER_XXFIELD('XX',KFIELD(:,JPHEXT+1),IFIELDP(:,1),TZFD%OWNER,TZFD%COMM) + CALL GATHER_XXFIELD('XX',KFIELD(:,JPHEXT+1),IFIELDP(:,1),TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) ELSE - CALL GATHER_XYFIELD(KFIELD,IFIELDP,TZFD%OWNER,TZFD%COMM) + CALL GATHER_XYFIELD(KFIELD,IFIELDP,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) END IF END IF CALL SECOND_MNH2(T1) TIMEZ%T_WRIT2D_GATH=TIMEZ%T_WRIT2D_GATH + T1 - T0 ! - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,IFIELDP,IRESP) IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,IFIELDP,IRESP) END IF CALL SECOND_MNH2(T2) TIMEZ%T_WRIT2D_WRIT=TIMEZ%T_WRIT2D_WRIT + T2 - T1 ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF ELSE IRESP = -61 @@ -1960,7 +1958,7 @@ CONTAINS END IF IF (GALLOC) DEALLOCATE(IFIELDP) IF (PRESENT(KRESP)) KRESP = IRESP - IF (ASSOCIATED(TZFD)) CALL MPI_BARRIER(TZFD%COMM,IERR) + IF (ASSOCIATED(TZFD)) CALL MPI_BARRIER(TPFILE%NMPICOMM,IERR) CALL SECOND_MNH2(T22) TIMEZ%T_WRIT2D_ALL=TIMEZ%T_WRIT2D_ALL + T22 - T11 ! @@ -2063,9 +2061,9 @@ CONTAINS END IF ELSE ! multiprocessor execution #ifndef MNH_INT8 - CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TZFD%COMM,IRESP) + CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP) #else - CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TZFD%COMM,IRESP) + CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP) #endif IF (ISIZEMAX==0) THEN CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_N3','ignoring variable with a zero size ('//TRIM(YRECFM)//')') @@ -2073,7 +2071,7 @@ CONTAINS RETURN END IF - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN ! I/O processor case CALL ALLOCBUFFER_ll(IFIELDP,KFIELD,YDIR,GALLOC) ELSE @@ -2082,21 +2080,21 @@ CONTAINS END IF ! IF (YDIR == 'XX' .OR. YDIR =='YY') THEN - CALL GATHER_XXFIELD(YDIR,KFIELD,IFIELDP,TZFD%OWNER,TZFD%COMM) + CALL GATHER_XXFIELD(YDIR,KFIELD,IFIELDP,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) ELSEIF (YDIR == 'XY') THEN IF (LPACK .AND. L2D) THEN - CALL GATHER_XXFIELD('XX',KFIELD(:,JPHEXT+1,:),IFIELDP(:,1,:),TZFD%OWNER,TZFD%COMM) + CALL GATHER_XXFIELD('XX',KFIELD(:,JPHEXT+1,:),IFIELDP(:,1,:),TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) ELSE - CALL GATHER_XYFIELD(KFIELD,IFIELDP,TZFD%OWNER,TZFD%COMM) + CALL GATHER_XYFIELD(KFIELD,IFIELDP,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) END IF END IF ! - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,IFIELDP,IRESP) IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,IFIELDP,IRESP) END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF ELSE IRESP = -61 @@ -2110,7 +2108,7 @@ CONTAINS END IF IF (GALLOC) DEALLOCATE(IFIELDP) IF (PRESENT(KRESP)) KRESP = IRESP - IF (ASSOCIATED(TZFD)) CALL MPI_BARRIER(TZFD%COMM,IERR) + IF (ASSOCIATED(TZFD)) CALL MPI_BARRIER(TPFILE%NMPICOMM,IERR) CALL SECOND_MNH2(T22) TIMEZ%T_WRIT3D_ALL=TIMEZ%T_WRIT3D_ALL + T22 - T11 ! @@ -2184,12 +2182,12 @@ CONTAINS IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,OFIELD,IRESP) IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,OFIELD,IRESP) ELSE - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,OFIELD,IRESP) IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,OFIELD,IRESP) END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF ! multiprocessor execution IF (TZFD%nb_procio.gt.1) THEN ! write the data in all Z files @@ -2302,9 +2300,9 @@ CONTAINS IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,OFIELD,IRESP) ELSE ! multiprocessor execution #ifndef MNH_INT8 - CALL MPI_ALLREDUCE(SIZE(OFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TZFD%COMM,IRESP) + CALL MPI_ALLREDUCE(SIZE(OFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP) #else - CALL MPI_ALLREDUCE(SIZE(OFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TZFD%COMM,IRESP) + CALL MPI_ALLREDUCE(SIZE(OFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP) #endif IF (ISIZEMAX==0) THEN CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_L1','ignoring variable with a zero size ('//TRIM(YRECFM)//')') @@ -2312,7 +2310,7 @@ CONTAINS RETURN END IF - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN CALL ALLOCBUFFER_ll(GFIELDP,OFIELD,YDIR,GALLOC) ELSE ALLOCATE(GFIELDP(0)) @@ -2320,15 +2318,15 @@ CONTAINS END IF ! IF (YDIR == 'XX' .OR. YDIR =='YY') THEN - CALL GATHER_XXFIELD(YDIR,OFIELD,GFIELDP,TZFD%OWNER,TZFD%COMM) + CALL GATHER_XXFIELD(YDIR,OFIELD,GFIELDP,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) END IF ! - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,GFIELDP,IRESP) IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,GFIELDP,IRESP) END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF ELSE IRESP = -61 @@ -2342,7 +2340,7 @@ CONTAINS END IF IF (GALLOC) DEALLOCATE(GFIELDP) IF (PRESENT(KRESP)) KRESP = IRESP - IF (ASSOCIATED(TZFD)) CALL MPI_BARRIER(TZFD%COMM,IERR) + IF (ASSOCIATED(TZFD)) CALL MPI_BARRIER(TPFILE%NMPICOMM,IERR) ! END SUBROUTINE IO_WRITE_FIELD_BYFIELD_L1 @@ -2413,12 +2411,12 @@ CONTAINS IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,HFIELD,IRESP) IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,HFIELD,IRESP) ELSE - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,HFIELD,IRESP) IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,HFIELD,IRESP) END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF ELSE IRESP = -61 @@ -2520,12 +2518,12 @@ CONTAINS IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,IFIELD,IRESP) IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,HFIELD,IRESP) ELSE - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,IFIELD,IRESP) IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,HFIELD,IRESP) END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF ELSE IRESP = -61 @@ -2605,12 +2603,12 @@ CONTAINS IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,TFIELD,IRESP) IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,TFIELD,IRESP) ELSE - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,TFIELD,IRESP) IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,TFIELD,IRESP) END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF ELSE IRESP = -61 @@ -2736,7 +2734,7 @@ CONTAINS IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,PLB,IRESP) END IF ELSE - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN ! I/O proc case CALL GET_GLOBALDIMS_ll(IIMAX_ll,IJMAX_ll) IF (YLBTYPE == 'LBX' .OR. YLBTYPE == 'LBXU') THEN @@ -2749,7 +2747,7 @@ CONTAINS IF (IIB /= 0) THEN TX3DP=>Z3D(IIB:IIE,IJB:IJE,:) IF (ISP /= JI) THEN - CALL MPI_RECV(TX3DP,SIZE(TX3DP),MPI_FLOAT,JI-1,99,TZFD%COMM,STATUS,IERR) + CALL MPI_RECV(TX3DP,SIZE(TX3DP),MPI_FLOAT,JI-1,99,TPFILE%NMPICOMM,STATUS,IERR) ELSE CALL GET_DISTRIB_LB(YLBTYPE,JI,'LOC','WRITE',IRIM,IIB,IIE,IJB,IJE) TX3DP = PLB(IIB:IIE,IJB:IJE,:) @@ -2775,8 +2773,9 @@ CONTAINS NB_REQ = NB_REQ + 1 ALLOCATE(T_TX3DP(NB_REQ)%X(IIB:IIE,IJB:IJE,IKU)) T_TX3DP(NB_REQ)%X=PLB(IIB:IIE,IJB:IJE,:) - CALL MPI_ISEND(T_TX3DP(NB_REQ)%X,SIZE(TX3DP),MPI_FLOAT,TZFD%OWNER-1,99,TZFD%COMM,REQ_TAB(NB_REQ),IERR) - !CALL MPI_BSEND(TX3DP,SIZE(TX3DP),MPI_FLOAT,TZFD%OWNER-1,99,TZFD%COMM,IERR) + CALL MPI_ISEND(T_TX3DP(NB_REQ)%X,SIZE(TX3DP),MPI_FLOAT,TPFILE%NMASTER_RANK-1,99, & + TPFILE%NMPICOMM,REQ_TAB(NB_REQ),IERR) + !CALL MPI_BSEND(TX3DP,SIZE(TX3DP),MPI_FLOAT,TPFILE%NMASTER_RANK-1,99,TPFILE%NMPICOMM,IERR) END IF IF (NB_REQ .GT.0 ) THEN CALL MPI_WAITALL(NB_REQ,REQ_TAB,MNH_STATUSES_IGNORE,IERR) @@ -2785,7 +2784,7 @@ CONTAINS DEALLOCATE(T_TX3DP,REQ_TAB) END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD& + CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TZFD& & %COMM,IERR) END IF !(GSMONOPROC) ELSE @@ -2856,7 +2855,7 @@ CONTAINS IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP) IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,ZFIELDP,IRESP) ELSE ! multiprocessor execution - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN ! Allocate the box ALLOCATE(ZFIELDP(KXEBOX-KXOBOX+1,KYEBOX-KYOBOX+1,SIZE(PFIELD,3),& & SIZE(PFIELD,4),SIZE(PFIELD,5))) @@ -2866,15 +2865,15 @@ CONTAINS GALLOC = .TRUE. END IF ! - CALL GATHER_XYFIELD(PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM,& + CALL GATHER_XYFIELD(PFIELD,ZFIELDP,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM,& & KXOBOX,KXEBOX,KYOBOX,KYEBOX,HBUDGET) ! - IF (ISP == TZFD%OWNER) THEN + IF (ISP == TPFILE%NMASTER_RANK) THEN IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP) IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,ZFIELDP,IRESP) END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) + CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF ! multiprocessor execution ELSE IRESP = -61 diff --git a/src/LIB/SURCOUCHE/src/modd_io.f90 b/src/LIB/SURCOUCHE/src/modd_io.f90 index fa7528b8f..91ee161de 100644 --- a/src/LIB/SURCOUCHE/src/modd_io.f90 +++ b/src/LIB/SURCOUCHE/src/modd_io.f90 @@ -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 diff --git a/src/LIB/SURCOUCHE/src/mode_fm.f90 b/src/LIB/SURCOUCHE/src/mode_fm.f90 index 7740ed8aa..206b34326 100644 --- a/src/LIB/SURCOUCHE/src/mode_fm.f90 +++ b/src/LIB/SURCOUCHE/src/mode_fm.f90 @@ -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) diff --git a/src/LIB/SURCOUCHE/src/mode_io.f90 b/src/LIB/SURCOUCHE/src/mode_io.f90 index 1a87a52f1..f1699a77f 100644 --- a/src/LIB/SURCOUCHE/src/mode_io.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io.f90 @@ -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 '& diff --git a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 b/src/LIB/SURCOUCHE/src/mode_netcdf.f90 index 5b42aefa8..084ea9d17 100644 --- a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 +++ b/src/LIB/SURCOUCHE/src/mode_netcdf.f90 @@ -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]') -- GitLab