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

Philippe 16/04/2018: IO: bug corrections for IO_READ_FIELD_BYFIELD_X3 (split files)

* REQ_TAB and T_TX2DP too small if less processes than split files
* missing broadcast if split files (deadlock if IRESP/=0)
parent b6fd9b61
No related branches found
No related tags found
No related merge requests found
...@@ -519,7 +519,7 @@ TYPE TX_2DP ...@@ -519,7 +519,7 @@ TYPE TX_2DP
REAL,DIMENSION(:,:), POINTER :: X REAL,DIMENSION(:,:), POINTER :: X
END TYPE TX_2DP END TYPE TX_2DP
! !
INTEGER :: IERR,IRESP INTEGER :: IERR,IRESP,IRESP_TMP
INTEGER :: IHEXTOT INTEGER :: IHEXTOT
INTEGER :: IK_FILE,IK_RANK,INB_PROC_REAL,JK_MAX INTEGER :: IK_FILE,IK_RANK,INB_PROC_REAL,JK_MAX
INTEGER :: JI,IXO,IXE,IYO,IYE INTEGER :: JI,IXO,IXE,IYO,IYE
...@@ -657,11 +657,11 @@ IF (IRESP==0) THEN ...@@ -657,11 +657,11 @@ IF (IRESP==0) THEN
WRITE(YK,'(I4.4)') JKK WRITE(YK,'(I4.4)') JKK
YRECZSLICE = TRIM(TPFIELD%CMNHNAME)//YK YRECZSLICE = TRIM(TPFIELD%CMNHNAME)//YK
IF (TPFILE%CFORMAT=='NETCDF4') THEN IF (TPFILE%CFORMAT=='NETCDF4') THEN
CALL IO_READ_FIELD_NC4(TZFILE,TZFIELD,ZSLICE_ll,IRESP) CALL IO_READ_FIELD_NC4(TZFILE,TZFIELD,ZSLICE_ll,IRESP_TMP)
ELSE IF (TPFILE%CFORMAT=='LFI') THEN ELSE IF (TPFILE%CFORMAT=='LFI') THEN
CALL IO_READ_FIELD_LFI(TZFILE,TZFIELD,ZSLICE_ll,IRESP) CALL IO_READ_FIELD_LFI(TZFILE,TZFIELD,ZSLICE_ll,IRESP_TMP)
ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
CALL IO_READ_FIELD_NC4(TZFILE,TZFIELD,ZSLICE_ll,IRESP) CALL IO_READ_FIELD_NC4(TZFILE,TZFIELD,ZSLICE_ll,IRESP_TMP)
END IF END IF
CALL SECOND_MNH2(T1) CALL SECOND_MNH2(T1)
TIMEZ%T_READ3D_READ=TIMEZ%T_READ3D_READ + T1 - T0 TIMEZ%T_READ3D_READ=TIMEZ%T_READ3D_READ + T1 - T0
...@@ -676,6 +676,9 @@ IF (IRESP==0) THEN ...@@ -676,6 +676,9 @@ IF (IRESP==0) THEN
END DO END DO
CALL GA_SYNC CALL GA_SYNC
! !
CALL MPI_BCAST(IRESP_TMP,1,MPI_INTEGER,IK_RANK-1,TZFILE%NMPICOMM,IERR)
IF (IRESP_TMP/=0) IRESP = IRESP_TMP !Keep last "error"
!
! get the columun data in this proc ! get the columun data in this proc
! !
! temp buf to avoid problem with none stride PFIELDS buffer with HALO ! temp buf to avoid problem with none stride PFIELDS buffer with HALO
...@@ -687,6 +690,8 @@ IF (IRESP==0) THEN ...@@ -687,6 +690,8 @@ IF (IRESP==0) THEN
ALLOCATE(ZSLICE_ll(0,0)) ALLOCATE(ZSLICE_ll(0,0))
GALLOC_ll = .TRUE. GALLOC_ll = .TRUE.
INB_PROC_REAL = MIN(TPFILE%NSUBFILES_IOZ,ISNPROC) INB_PROC_REAL = MIN(TPFILE%NSUBFILES_IOZ,ISNPROC)
ALLOCATE(REQ_TAB((ISNPROC-1)*INB_PROC_REAL))
ALLOCATE(T_TX2DP((ISNPROC-1)*INB_PROC_REAL))
Z_SLICE: DO JK=1,SIZE(PFIELD,3),INB_PROC_REAL Z_SLICE: DO JK=1,SIZE(PFIELD,3),INB_PROC_REAL
! !
! read the data ! read the data
...@@ -694,8 +699,6 @@ IF (IRESP==0) THEN ...@@ -694,8 +699,6 @@ IF (IRESP==0) THEN
JK_MAX=MIN(SIZE(PFIELD,3),JK+INB_PROC_REAL-1) JK_MAX=MIN(SIZE(PFIELD,3),JK+INB_PROC_REAL-1)
! !
NB_REQ=0 NB_REQ=0
ALLOCATE(REQ_TAB(ISNPROC-1))
ALLOCATE(T_TX2DP(ISNPROC-1))
DO JKK=JK,JK_MAX DO JKK=JK,JK_MAX
IF (TPFILE%NSUBFILES_IOZ .GT. 1 ) THEN IF (TPFILE%NSUBFILES_IOZ .GT. 1 ) THEN
IK_FILE = IO_FILE(JKK,TPFILE%NSUBFILES_IOZ) IK_FILE = IO_FILE(JKK,TPFILE%NSUBFILES_IOZ)
...@@ -719,12 +722,12 @@ IF (IRESP==0) THEN ...@@ -719,12 +722,12 @@ IF (IRESP==0) THEN
CALL SECOND_MNH2(T0) CALL SECOND_MNH2(T0)
WRITE(YK,'(I4.4)') JKK WRITE(YK,'(I4.4)') JKK
YRECZSLICE = TRIM(TPFIELD%CMNHNAME)//YK YRECZSLICE = TRIM(TPFIELD%CMNHNAME)//YK
IF (TPFILE%CFORMAT=='NETCDF4') THEN IF (TZFILE%CFORMAT=='NETCDF4') THEN
CALL IO_READ_FIELD_NC4(TZFILE,TZFIELD,ZSLICE_ll,IRESP) CALL IO_READ_FIELD_NC4(TZFILE,TZFIELD,ZSLICE_ll,IRESP_TMP)
ELSE IF (TPFILE%CFORMAT=='LFI') THEN ELSE IF (TZFILE%CFORMAT=='LFI') THEN
CALL IO_READ_FIELD_LFI(TZFILE,TZFIELD,ZSLICE_ll,IRESP) CALL IO_READ_FIELD_LFI(TZFILE,TZFIELD,ZSLICE_ll,IRESP_TMP)
ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN ELSE IF (TZFILE%CFORMAT=='LFICDF4') THEN
CALL IO_READ_FIELD_NC4(TZFILE,TZFIELD,ZSLICE_ll,IRESP) CALL IO_READ_FIELD_NC4(TZFILE,TZFIELD,ZSLICE_ll,IRESP_TMP)
END IF END IF
CALL SECOND_MNH2(T1) CALL SECOND_MNH2(T1)
TIMEZ%T_READ3D_READ=TIMEZ%T_READ3D_READ + T1 - T0 TIMEZ%T_READ3D_READ=TIMEZ%T_READ3D_READ + T1 - T0
...@@ -745,6 +748,9 @@ IF (IRESP==0) THEN ...@@ -745,6 +748,9 @@ IF (IRESP==0) THEN
CALL SECOND_MNH2(T2) CALL SECOND_MNH2(T2)
TIMEZ%T_READ3D_SEND=TIMEZ%T_READ3D_SEND + T2 - T1 TIMEZ%T_READ3D_SEND=TIMEZ%T_READ3D_SEND + T2 - T1
END IF END IF
!
CALL MPI_BCAST(IRESP_TMP,1,MPI_INTEGER,IK_RANK-1,TZFILE%NMPICOMM,IERR)
IF (IRESP_TMP/=0) IRESP = IRESP_TMP !Keep last "error"
TZFILE => NULL() TZFILE => NULL()
END DO END DO
! !
...@@ -799,12 +805,13 @@ IF (IRESP==0) THEN ...@@ -799,12 +805,13 @@ IF (IRESP==0) THEN
CALL MPI_WAITALL(NB_REQ,REQ_TAB,MNH_STATUSES_IGNORE,IERR) CALL MPI_WAITALL(NB_REQ,REQ_TAB,MNH_STATUSES_IGNORE,IERR)
DO JI=1,NB_REQ ; DEALLOCATE(T_TX2DP(JI)%X) ; ENDDO DO JI=1,NB_REQ ; DEALLOCATE(T_TX2DP(JI)%X) ; ENDDO
END IF END IF
DEALLOCATE(T_TX2DP)
DEALLOCATE(REQ_TAB)
CALL SECOND_MNH2(T1) CALL SECOND_MNH2(T1)
TIMEZ%T_READ3D_WAIT=TIMEZ%T_READ3D_WAIT + T1 - T0 TIMEZ%T_READ3D_WAIT=TIMEZ%T_READ3D_WAIT + T1 - T0
END DO Z_SLICE END DO Z_SLICE
! !
DEALLOCATE(T_TX2DP)
DEALLOCATE(REQ_TAB)
!
!Broadcast header only if IRESP==-111 !Broadcast header only if IRESP==-111
!because metadata of field has been modified in IO_READ_FIELD_xxx !because metadata of field has been modified in IO_READ_FIELD_xxx
IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD) IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment