diff --git a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 index 42ca4432c854ee3161405280caa19d049159e729..32e9ede127c12271e166e01deb677722c3656917 100644 --- a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 +++ b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 @@ -692,6 +692,7 @@ CONTAINS INTEGER :: IERR TYPE(FD_ll), POINTER :: TZFD INTEGER :: IRESP + INTEGER :: ISIZEMAX REAL,DIMENSION(:),POINTER :: ZFIELDP LOGICAL :: GALLOC ! @@ -724,6 +725,17 @@ CONTAINS IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,PFIELD,IRESP) 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) +#else + CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TZFD%COMM,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)//')') + IF (PRESENT(KRESP)) KRESP=0 + RETURN + END IF + IF (ISP == TZFD%OWNER) THEN CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,YDIR,GALLOC) ELSE @@ -989,6 +1001,7 @@ CONTAINS CHARACTER(LEN=2) :: YDIR ! field form CHARACTER(LEN=JPFINL) :: YFNLFI INTEGER :: IERR + INTEGER :: ISIZEMAX TYPE(FD_ll), POINTER :: TZFD INTEGER :: IRESP REAL,DIMENSION(:,:),POINTER :: ZFIELDP @@ -1042,6 +1055,17 @@ CONTAINS END IF ELSE ! multiprocessor execution CALL SECOND_MNH2(T0) +#ifndef MNH_INT8 + CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TZFD%COMM,IRESP) +#else + CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TZFD%COMM,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)//')') + IF (PRESENT(KRESP)) KRESP=0 + RETURN + END IF + IF (ISP == TZFD%OWNER) THEN ! I/O processor case CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,YDIR,GALLOC) @@ -1555,6 +1579,7 @@ CONTAINS CHARACTER(LEN=2) :: YDIR ! field form CHARACTER(LEN=JPFINL) :: YFNLFI INTEGER :: IERR + INTEGER :: ISIZEMAX TYPE(FD_ll), POINTER :: TZFD INTEGER :: IRESP REAL,DIMENSION(:,:,:),POINTER :: ZFIELDP @@ -1626,6 +1651,17 @@ CONTAINS IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,PFIELD,IRESP) 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) +#else + CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TZFD%COMM,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)//')') + IF (PRESENT(KRESP)) KRESP=0 + RETURN + END IF + ! write 3D field in 1 time = output for graphique IF (ISP == TZFD%OWNER) THEN CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,YDIR,GALLOC) @@ -1653,6 +1689,16 @@ CONTAINS & %COMM,IERR) ! ELSE ! multiprocessor execution & // IO +#ifndef MNH_INT8 + CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TZFD%COMM,IRESP) +#else + CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TZFD%COMM,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)//')') + IF (PRESENT(KRESP)) KRESP=0 + RETURN + END IF ! !JUAN BG Z SLIDE ! @@ -2028,6 +2074,7 @@ CONTAINS CHARACTER(LEN=2) :: YDIR ! field form CHARACTER(LEN=JPFINL) :: YFNLFI INTEGER :: IERR + INTEGER :: ISIZEMAX TYPE(FD_ll), POINTER :: TZFD INTEGER :: IRESP REAL,DIMENSION(:,:,:,:),POINTER :: ZFIELDP @@ -2066,6 +2113,17 @@ CONTAINS IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,PFIELD,IRESP) END IF ELSE +#ifndef MNH_INT8 + CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TZFD%COMM,IRESP) +#else + CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TZFD%COMM,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)//')') + IF (PRESENT(KRESP)) KRESP=0 + RETURN + END IF + IF (ISP == TZFD%OWNER) THEN CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,YDIR,GALLOC) ELSE @@ -2261,6 +2319,7 @@ CONTAINS CHARACTER(LEN=2) :: YDIR ! field form CHARACTER(LEN=JPFINL) :: YFNLFI INTEGER :: IERR + INTEGER :: ISIZEMAX TYPE(FD_ll), POINTER :: TZFD INTEGER :: IRESP REAL,DIMENSION(:,:,:,:,:),POINTER :: ZFIELDP @@ -2299,6 +2358,17 @@ CONTAINS IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,PFIELD,IRESP) END IF ELSE +#ifndef MNH_INT8 + CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TZFD%COMM,IRESP) +#else + CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TZFD%COMM,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)//')') + IF (PRESENT(KRESP)) KRESP=0 + RETURN + END IF + IF (ISP == TZFD%OWNER) THEN CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,YDIR,GALLOC) ELSE @@ -2476,6 +2546,7 @@ CONTAINS CHARACTER(LEN=2) :: YDIR ! field form CHARACTER(LEN=JPFINL) :: YFNLFI INTEGER :: IERR + INTEGER :: ISIZEMAX TYPE(FD_ll), POINTER :: TZFD INTEGER :: IRESP REAL,DIMENSION(:,:,:,:,:,:),POINTER :: ZFIELDP @@ -2504,6 +2575,17 @@ CONTAINS IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,PFIELD,IRESP) 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) +#else + CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TZFD%COMM,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)//')') + IF (PRESENT(KRESP)) KRESP=0 + RETURN + END IF + IF (ISP == TZFD%OWNER) THEN CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,YDIR,GALLOC) ELSE @@ -2877,6 +2959,7 @@ CONTAINS CHARACTER(LEN=2) :: YDIR ! field form CHARACTER(LEN=JPFINL) :: YFNLFI INTEGER :: IERR + INTEGER :: ISIZEMAX TYPE(FD_ll), POINTER :: TZFD INTEGER :: IRESP INTEGER,DIMENSION(:),POINTER :: IFIELDP @@ -2904,6 +2987,17 @@ CONTAINS IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,KFIELD,IRESP) 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) +#else + CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TZFD%COMM,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)//')') + IF (PRESENT(KRESP)) KRESP=0 + RETURN + END IF + IF (ISP == TZFD%OWNER) THEN CALL ALLOCBUFFER_ll(IFIELDP,KFIELD,YDIR,GALLOC) ELSE @@ -3096,6 +3190,7 @@ CONTAINS CHARACTER(LEN=2) :: YDIR ! field form CHARACTER(LEN=JPFINL) :: YFNLFI INTEGER :: IERR + INTEGER :: ISIZEMAX TYPE(FD_ll), POINTER :: TZFD INTEGER :: IRESP INTEGER,DIMENSION(:,:),POINTER :: IFIELDP @@ -3142,6 +3237,17 @@ CONTAINS IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,KFIELD,IRESP) END IF ELSE ! multiprocessor execution +#ifndef MNH_INT8 + CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TZFD%COMM,IRESP) +#else + CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TZFD%COMM,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)//')') + IF (PRESENT(KRESP)) KRESP=0 + RETURN + END IF + CALL SECOND_MNH2(T0) IF (ISP == TZFD%OWNER) THEN ! I/O processor case @@ -3242,6 +3348,7 @@ CONTAINS CHARACTER(LEN=2) :: YDIR ! field form CHARACTER(LEN=JPFINL) :: YFNLFI INTEGER :: IERR + INTEGER :: ISIZEMAX TYPE(FD_ll), POINTER :: TZFD INTEGER :: IRESP INTEGER,DIMENSION(:,:,:),POINTER :: IFIELDP @@ -3285,6 +3392,17 @@ CONTAINS IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,KFIELD,IRESP) END IF ELSE ! multiprocessor execution +#ifndef MNH_INT8 + CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TZFD%COMM,IRESP) +#else + CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TZFD%COMM,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)//')') + IF (PRESENT(KRESP)) KRESP=0 + RETURN + END IF + IF (ISP == TZFD%OWNER) THEN ! I/O processor case CALL ALLOCBUFFER_ll(IFIELDP,KFIELD,YDIR,GALLOC) @@ -3639,6 +3757,7 @@ CONTAINS CHARACTER(LEN=2) :: YDIR ! field form CHARACTER(LEN=JPFINL) :: YFNLFI INTEGER :: IERR + INTEGER :: ISIZEMAX TYPE(FD_ll), POINTER :: TZFD INTEGER :: IRESP LOGICAL,DIMENSION(:),POINTER :: GFIELDP @@ -3666,6 +3785,17 @@ CONTAINS IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,OFIELD,IRESP) 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) +#else + CALL MPI_ALLREDUCE(SIZE(OFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TZFD%COMM,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)//')') + IF (PRESENT(KRESP)) KRESP=0 + RETURN + END IF + IF (ISP == TZFD%OWNER) THEN CALL ALLOCBUFFER_ll(GFIELDP,OFIELD,YDIR,GALLOC) ELSE