From ae5b8f7dc1e5787347449d40749ea6b09bf43c81 Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Mon, 20 Nov 2017 17:08:46 +0100 Subject: [PATCH] Philippe 20/11/2017: IO: transfer IOCDF structure from FD_ll to TFILEDATA --- src/LIB/SURCOUCHE/src/fmwrit_ll.f90 | 133 ++++++++++++++++------------ src/LIB/SURCOUCHE/src/modd_io.f90 | 3 +- src/LIB/SURCOUCHE/src/mode_fd.f90 | 2 - src/LIB/SURCOUCHE/src/mode_fm.f90 | 12 +-- src/LIB/SURCOUCHE/src/mode_io.f90 | 20 +++-- 5 files changed, 97 insertions(+), 73 deletions(-) diff --git a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 index 29a82e335..3d989f9e6 100644 --- a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 +++ b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 @@ -168,6 +168,8 @@ END MODULE MODE_GA MODULE MODE_FMWRIT USE MODD_MPIF + USE MODD_IO_ll, ONLY: TFILEDATA + USE MODE_FIELD #if defined(MNH_IOCDF4) USE MODE_NETCDF @@ -265,7 +267,6 @@ CONTAINS ! USE MODD_CONF USE MODD_CONF_n, ONLY : CSTORAGE_TYPE - USE MODD_IO_ll, ONLY: TFILEDATA ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! File structure CHARACTER(LEN=*),OPTIONAL,INTENT(IN) :: HDAD_NAME @@ -303,8 +304,6 @@ CONTAINS SUBROUTINE IO_WRITE_FIELD_BYNAME_X0(TPFILE,HNAME,PFIELD,KRESP) - ! - USE MODD_IO_ll, ONLY : TFILEDATA ! !* 0.1 Declarations of arguments ! @@ -378,11 +377,11 @@ CONTAINS IF (ASSOCIATED(TZFD)) THEN IF (GSMONOPROC) THEN ! sequential execution IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,PFIELD,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,PFIELD,IRESP) ELSE ! multiprocessor execution 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) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,PFIELD,IRESP) END IF ! CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) @@ -401,7 +400,7 @@ CONTAINS ' not found in list') END IF IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TZFILE,TPFIELD,PFIELD,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TZFILE,TPFIELD,TZFD_IOZ%CDF,PFIELD,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TZFILE,TPFIELD,TZFILE%TNCDIMS,PFIELD,IRESP) END IF END DO ENDIF @@ -500,7 +499,7 @@ CONTAINS IF (ASSOCIATED(TZFD)) THEN IF (GSMONOPROC) THEN ! sequential execution IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,PFIELD,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,PFIELD,IRESP) ELSE ! multiprocessor execution #ifndef MNH_INT8 CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP) @@ -526,7 +525,7 @@ CONTAINS ! 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) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,ZFIELDP,IRESP) END IF ! CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) @@ -645,15 +644,15 @@ CONTAINS 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) IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,ZFIELDP,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,ZFIELDP,IRESP) ! ELSE IF (LPACK .AND. L2D .AND. YDIR=='XY') THEN ELSEIF (LPACK .AND. L2D .AND. SIZE(PFIELD,2)==IHEXTOT) THEN ZFIELDP=>PFIELD(:,JPHEXT+1:JPHEXT+1) IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,ZFIELDP,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,ZFIELDP,IRESP) ELSE IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,PFIELD,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,PFIELD,IRESP) END IF ELSE ! multiprocessor execution CALL SECOND_MNH2(T0) @@ -727,7 +726,7 @@ CONTAINS ! 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) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,ZFIELDP,IRESP) END IF #ifdef MNH_GA !!$ IF (ISP .EQ. 1 ) THEN @@ -795,6 +794,7 @@ CONTAINS USE MODE_GATHER_ll !JUANZ USE MODE_IO_ll, ONLY : io_file,io_rank + USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME USE MODD_TIMEZ, ONLY : TIMEZ USE MODE_MNH_TIMING, ONLY : SECOND_MNH2 !JUANZ @@ -806,7 +806,7 @@ CONTAINS ! !* 0.1 Declarations of arguments ! - TYPE(TFILEDATA), INTENT(IN) :: TPFILE + TYPE(TFILEDATA),TARGET, INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD REAL,DIMENSION(:,:,:),TARGET,INTENT(IN) :: PFIELD ! array containing the data field INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code @@ -853,6 +853,9 @@ CONTAINS INTEGER :: IHEXTOT CHARACTER(LEN=:),ALLOCATABLE :: YMSG CHARACTER(LEN=6) :: YRESP + TYPE(TFILEDATA),POINTER :: TZFILE + ! + TZFILE => NULL() ! YFILEM = TPFILE%CNAME YRECFM = TPFIELD%CMNHNAME @@ -879,15 +882,15 @@ CONTAINS 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,:) IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,ZFIELDP,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,ZFIELDP,IRESP) ! ELSE IF (LPACK .AND. L2D .AND. YDIR=='XY') THEN ELSEIF (LPACK .AND. L2D .AND. SIZE(PFIELD,2)==IHEXTOT) THEN ZFIELDP=>PFIELD(:,JPHEXT+1:JPHEXT+1,:) IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,ZFIELDP,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,ZFIELDP,IRESP) ELSE IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,PFIELD,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,PFIELD,IRESP) END IF ELSEIF ( (TZFD%nb_procio .eq. 1 ) .OR. ( YDIR == '--' ) ) THEN ! multiprocessor execution & 1 proc IO #ifndef MNH_INT8 @@ -921,7 +924,7 @@ CONTAINS ! 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) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,ZFIELDP,IRESP) END IF ! CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) @@ -971,6 +974,11 @@ CONTAINS write(YK_FILE ,'(".Z",i3.3)') IK_FILE+1 YFILE_IOZ = TRIM(YFILEM)//YK_FILE//".lfi" TZFD_IOZ => GETFD(YFILE_IOZ) + CALL IO_FILE_FIND_BYNAME(TRIM(YFILEM)//YK_FILE,TZFILE,IRESP) + IF (IRESP/=0) THEN + CALL PRINT_MSG(NVERB_FATAL,'IO','IO_WRITE_FIELD_BYFIELD_X3','file '//TRIM(YFILE_IOZ)//& + ' not found in list') + END IF ! IK_RANK = TZFD_IOZ%OWNER !IK_RANK = 1 + io_rank(IK_FILE,ISNPROC,TZFD%nb_procio) @@ -992,7 +1000,7 @@ CONTAINS TIMEZ%T_WRIT3D_RECV=TIMEZ%T_WRIT3D_RECV + T1 - T0 ! IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZSLIDE_ll,IRESP,KVERTLEVEL=JKK,KZFILE=IK_FILE+1) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD_IOZ%CDF,ZSLIDE_ll,IRESP,KVERTLEVEL=JKK,KZFILE=IK_FILE+1) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFILE%TNCDIMS,ZSLIDE_ll,IRESP,KVERTLEVEL=JKK,KZFILE=IK_FILE+1) CALL SECOND_MNH2(T2) TIMEZ%T_WRIT3D_WRIT=TIMEZ%T_WRIT3D_WRIT + T2 - T1 END IF @@ -1033,8 +1041,14 @@ CONTAINS write(YK_FILE ,'(".Z",i3.3)') IK_FILE+1 YFILE_IOZ = TRIM(YFILEM)//YK_FILE//".lfi" TZFD_IOZ => GETFD(YFILE_IOZ) + CALL IO_FILE_FIND_BYNAME(TRIM(YFILEM)//YK_FILE,TZFILE,IRESP) + IF (IRESP/=0) THEN + CALL PRINT_MSG(NVERB_FATAL,'IO','IO_WRITE_FIELD_BYFIELD_X3','file '//TRIM(YFILE_IOZ)//& + ' not found in list') + END IF ELSE TZFD_IOZ => TZFD + TZFILE => TPFILE END IF ! !IK_RANK = 1 + io_rank(IK_FILE,ISNPROC,TZFD%nb_procio) @@ -1080,8 +1094,14 @@ CONTAINS write(YK_FILE ,'(".Z",i3.3)') IK_FILE+1 YFILE_IOZ = TRIM(YFILEM)//YK_FILE//".lfi" TZFD_IOZ => GETFD(YFILE_IOZ) + CALL IO_FILE_FIND_BYNAME(TRIM(YFILEM)//YK_FILE,TZFILE,IRESP) + IF (IRESP/=0) THEN + CALL PRINT_MSG(NVERB_FATAL,'IO','IO_WRITE_FIELD_BYFIELD_X3','file '//TRIM(YFILE_IOZ)//& + ' not found in list') + END IF ELSE TZFD_IOZ => TZFD + TZFILE => TPFILE ENDIF IK_RANK = TZFD_IOZ%OWNER !IK_RANK = 1 + io_rank(IK_FILE,ISNPROC,TZFD%nb_procio) @@ -1111,7 +1131,8 @@ CONTAINS TIMEZ%T_WRIT3D_RECV=TIMEZ%T_WRIT3D_RECV + T1 - T0 !JUANIOZ IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZSLIDE_ll,IRESP,KVERTLEVEL=JKK,KZFILE=IK_FILE+1) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD_IOZ%CDF,ZSLIDE_ll,IRESP,KVERTLEVEL=JKK,KZFILE=IK_FILE+1) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFILE%TNCDIMS,ZSLIDE_ll,IRESP, & + KVERTLEVEL=JKK,KZFILE=IK_FILE+1) CALL SECOND_MNH2(T2) TIMEZ%T_WRIT3D_WRIT=TIMEZ%T_WRIT3D_WRIT + T2 - T1 END IF @@ -1245,10 +1266,10 @@ CONTAINS ELSEIF (LPACK .AND. L2D .AND. SIZE(PFIELD,2)==IHEXTOT) THEN ZFIELDP=>PFIELD(:,JPHEXT+1:JPHEXT+1,:,:) IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,ZFIELDP,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,ZFIELDP,IRESP) ELSE IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,PFIELD,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,PFIELD,IRESP) END IF ELSE #ifndef MNH_INT8 @@ -1281,7 +1302,7 @@ CONTAINS ! 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) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,ZFIELDP,IRESP) END IF ! CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) @@ -1389,10 +1410,10 @@ CONTAINS ELSEIF (LPACK .AND. L2D .AND. SIZE(PFIELD,2)==IHEXTOT) THEN ZFIELDP=>PFIELD(:,JPHEXT+1:JPHEXT+1,:,:,:) IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,ZFIELDP,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,ZFIELDP,IRESP) ELSE IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,PFIELD,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,PFIELD,IRESP) END IF ELSE #ifndef MNH_INT8 @@ -1426,7 +1447,7 @@ CONTAINS ! 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) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,ZFIELDP,IRESP) END IF ! CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) @@ -1527,7 +1548,7 @@ CONTAINS IF (ASSOCIATED(TZFD)) THEN IF (GSMONOPROC) THEN ! sequential execution IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,PFIELD,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,PFIELD,IRESP) ELSE #ifndef MNH_INT8 CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP) @@ -1555,7 +1576,7 @@ CONTAINS ! 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) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,ZFIELDP,IRESP) END IF ! CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) @@ -1641,11 +1662,11 @@ CONTAINS IF (ASSOCIATED(TZFD)) THEN IF (GSMONOPROC) THEN ! sequential execution IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,KFIELD,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,KFIELD,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,KFIELD,IRESP) ELSE 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) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,KFIELD,IRESP) END IF ! CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) @@ -1664,7 +1685,7 @@ CONTAINS ' not found in list') END IF IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TZFILE,TPFIELD,KFIELD,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TZFILE,TPFIELD,TZFD_IOZ%CDF,KFIELD,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TZFILE,TPFIELD,TZFILE%TNCDIMS,KFIELD,IRESP) END IF END DO ENDIF @@ -1758,7 +1779,7 @@ CONTAINS IF (ASSOCIATED(TZFD)) THEN IF (GSMONOPROC) THEN ! sequential execution IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,KFIELD,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,KFIELD,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,KFIELD,IRESP) ELSE ! multiprocessor execution #ifndef MNH_INT8 CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP) @@ -1784,7 +1805,7 @@ CONTAINS ! 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) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,IFIELDP,IRESP) END IF ! CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) @@ -1894,15 +1915,15 @@ CONTAINS 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) IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,IFIELDP,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,IFIELDP,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,IFIELDP,IRESP) ! ELSE IF (LPACK .AND. L2D .AND. YDIR=='XY') THEN ELSEIF (LPACK .AND. L2D .AND. SIZE(KFIELD,2)==IHEXTOT) THEN IFIELDP=>KFIELD(:,JPHEXT+1:JPHEXT+1) IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,IFIELDP,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,IFIELDP,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,IFIELDP,IRESP) ELSE IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,KFIELD,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,KFIELD,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,KFIELD,IRESP) END IF ELSE ! multiprocessor execution #ifndef MNH_INT8 @@ -1939,7 +1960,7 @@ CONTAINS ! 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) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,IFIELDP,IRESP) END IF CALL SECOND_MNH2(T2) TIMEZ%T_WRIT2D_WRIT=TIMEZ%T_WRIT2D_WRIT + T2 - T1 @@ -2049,15 +2070,15 @@ CONTAINS 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,:) IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,IFIELDP,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,IFIELDP,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,IFIELDP,IRESP) ! ELSE IF (LPACK .AND. L2D .AND. YDIR=='XY') THEN ELSEIF (LPACK .AND. L2D .AND. SIZE(KFIELD,2)==IHEXTOT) THEN IFIELDP=>KFIELD(:,JPHEXT+1:JPHEXT+1,:) IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,IFIELDP,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,IFIELDP,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,IFIELDP,IRESP) ELSE IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,KFIELD,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,KFIELD,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,KFIELD,IRESP) END IF ELSE ! multiprocessor execution #ifndef MNH_INT8 @@ -2091,7 +2112,7 @@ CONTAINS ! 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) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,IFIELDP,IRESP) END IF ! CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) @@ -2180,11 +2201,11 @@ CONTAINS IF (ASSOCIATED(TZFD)) THEN IF (GSMONOPROC) THEN ! sequential execution IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,OFIELD,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,OFIELD,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,OFIELD,IRESP) ELSE 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) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,OFIELD,IRESP) END IF ! CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) @@ -2203,7 +2224,7 @@ CONTAINS ' not found in list') END IF IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TZFILE,TPFIELD,OFIELD,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TZFILE,TPFIELD,TZFD_IOZ%CDF,OFIELD,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TZFILE,TPFIELD,TZFILE%TNCDIMS,OFIELD,IRESP) END IF END DO ENDIF @@ -2297,7 +2318,7 @@ CONTAINS IF (ASSOCIATED(TZFD)) THEN IF (GSMONOPROC) THEN ! sequential execution IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,OFIELD,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,OFIELD,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,OFIELD,IRESP) ELSE ! multiprocessor execution #ifndef MNH_INT8 CALL MPI_ALLREDUCE(SIZE(OFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP) @@ -2323,7 +2344,7 @@ CONTAINS ! 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) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,GFIELDP,IRESP) END IF ! CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) @@ -2409,11 +2430,11 @@ CONTAINS IF (ASSOCIATED(TZFD)) THEN IF (GSMONOPROC) THEN ! sequential execution IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,HFIELD,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,HFIELD,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,HFIELD,IRESP) ELSE 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) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,HFIELD,IRESP) END IF ! CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) @@ -2516,11 +2537,11 @@ CONTAINS IF (ASSOCIATED(TZFD)) THEN IF (GSMONOPROC) THEN ! sequential execution IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,IFIELD,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,HFIELD,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,HFIELD,IRESP) ELSE 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) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,HFIELD,IRESP) END IF ! CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) @@ -2601,11 +2622,11 @@ CONTAINS IF (ASSOCIATED(TZFD)) THEN IF (GSMONOPROC) THEN ! sequential execution IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,TFIELD,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,TFIELD,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,TFIELD,IRESP) ELSE 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) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,TFIELD,IRESP) END IF ! CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) @@ -2728,10 +2749,10 @@ CONTAINS IF (LPACK .AND. L2D) THEN TX3DP=>PLB(:,JPHEXT+1:JPHEXT+1,:) IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,TX3DP,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,TX3DP,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,TX3DP,IRESP) ELSE IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PLB,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,PLB,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,PLB,IRESP) END IF ELSE IF (ISP == TPFILE%NMASTER_RANK) THEN @@ -2760,7 +2781,7 @@ CONTAINS TX3DP=>Z3D END IF IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,TX3DP,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,TX3DP,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,TX3DP,IRESP) ELSE NB_REQ=0 ALLOCATE(REQ_TAB(1)) @@ -2853,7 +2874,7 @@ CONTAINS ZFIELDP=>PFIELD END IF IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,ZFIELDP,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,ZFIELDP,IRESP) ELSE ! multiprocessor execution IF (ISP == TPFILE%NMASTER_RANK) THEN ! Allocate the box @@ -2870,7 +2891,7 @@ CONTAINS ! 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) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TPFILE%TNCDIMS,ZFIELDP,IRESP) END IF ! CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) diff --git a/src/LIB/SURCOUCHE/src/modd_io.f90 b/src/LIB/SURCOUCHE/src/modd_io.f90 index 91ee161de..1a2a24373 100644 --- a/src/LIB/SURCOUCHE/src/modd_io.f90 +++ b/src/LIB/SURCOUCHE/src/modd_io.f90 @@ -14,7 +14,7 @@ MODULE MODD_IO_ll ! -USE MODD_NETCDF, ONLY: IDCDF_KIND +USE MODD_NETCDF, ONLY: IDCDF_KIND, IOCDF ! IMPLICIT NONE ! @@ -95,6 +95,7 @@ TYPE TFILEDATA ! instead of double precision LOGICAL :: LNCCOMPRESS = .FALSE. ! Do compression on fields INTEGER(KIND=IDCDF_KIND) :: NNCCOMPRESS_LEVEL = 0 ! Compression level + TYPE(IOCDF),POINTER :: TNCDIMS => NULL() ! Structure containing netCDF dimensions ! !Fields for other files INTEGER :: NLU = -1 !Logical unit number diff --git a/src/LIB/SURCOUCHE/src/mode_fd.f90 b/src/LIB/SURCOUCHE/src/mode_fd.f90 index 4233dc991..9fad3e0f2 100644 --- a/src/LIB/SURCOUCHE/src/mode_fd.f90 +++ b/src/LIB/SURCOUCHE/src/mode_fd.f90 @@ -29,7 +29,6 @@ TYPE FD_ll CHARACTER(LEN=15) :: MODE ! Flag mode acces ('distrib','global','specific') INTEGER :: OWNER ! I/O Processor number TYPE(LFIPARAM), POINTER :: PARAM - TYPE(IOCDF), POINTER :: CDF !JUANZ INTEGER :: NB_PROCIO = 1 !JUANZ @@ -97,7 +96,6 @@ IF (IRESP > 0) THEN PRINT *, 'NEWFD : Erreur d"allocation memoire...' END IF -NULLIFY(TZFD%CDF) !! Add TZFD to top of list TPFDLIST TZFD%NEXT=>TFDLIST TFDLIST=>TZFD diff --git a/src/LIB/SURCOUCHE/src/mode_fm.f90 b/src/LIB/SURCOUCHE/src/mode_fm.f90 index 206b34326..ad4a9b116 100644 --- a/src/LIB/SURCOUCHE/src/mode_fm.f90 +++ b/src/LIB/SURCOUCHE/src/mode_fm.f90 @@ -241,7 +241,6 @@ SELECT CASE(TPFILE%CTYPE) CALL FMOPEN_ll(TPFILE,IRESP,OPARALLELIO=OPARALLELIO) ! TZFDLFI=>GETFD(ADJUSTL(TRIM(TPFILE%CNAME)//'.lfi')) - !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)) @@ -440,7 +439,7 @@ IF (ISP == TPFILE%NMASTER_RANK) THEN IF (LIOCDF4) THEN IF (YACTION == 'READ' .AND. .NOT. LLFIREAD) THEN !! Open NetCDF File for reading - TZFDLFI%CDF => NEWIOCDF() + TPFILE%TNCDIMS => NEWIOCDF() CALL PRINT_MSG(NVERB_DEBUG,'IO','FMOPEN_ll','NF90_OPEN for '//TRIM(YFILEM)//'.nc') INCERR = NF90_OPEN(ADJUSTL(TRIM(YFILEM))//".nc", NF90_NOWRITE, TPFILE%NNCID) IF (INCERR /= NF90_NOERR) THEN @@ -448,11 +447,11 @@ IF (ISP == TPFILE%NMASTER_RANK) THEN PRINT *, 'Error in opening (FMOPEN_ll/NF90_OPEN) ', TRIM(YFILEM)//'.nc', ' : ', NF90_STRERROR(INCERR) STOP END IF - TZFDLFI%CDF%NCID = TPFILE%NNCID + TPFILE%TNCDIMS%NCID = TPFILE%NNCID END IF IF (YACTION == 'WRITE') THEN - TZFDLFI%CDF => NEWIOCDF() + TPFILE%TNCDIMS => NEWIOCDF() CALL PRINT_MSG(NVERB_DEBUG,'IO','FMOPEN_ll','NF90_CREATE for '//TRIM(YFILEM)//'.nc') INCERR = NF90_CREATE(ADJUSTL(TRIM(YFILEM))//".nc", & &IOR(NF90_CLOBBER,NF90_NETCDF4), TPFILE%NNCID) @@ -461,7 +460,7 @@ IF (ISP == TPFILE%NMASTER_RANK) THEN PRINT *, 'Error in opening (FMOPEN_ll/NF90_CREATE) ', TRIM(YFILEM)//'.nc', ' : ', NF90_STRERROR(INCERR) STOP END IF - TZFDLFI%CDF%NCID = TPFILE%NNCID + TPFILE%TNCDIMS%NCID = TPFILE%NNCID END IF END IF #endif @@ -744,7 +743,8 @@ IF (ISP == TPFILE%NMASTER_RANK) THEN CALL LFIFER(IRESP8,TPFILE%NLFIFLU,YSTATU) IRESP = IRESP8 END IF - IF (ASSOCIATED(TZFDLFI%CDF)) CALL CLEANIOCDF(TZFDLFI%CDF) +! IF (ASSOCIATED(TZFDLFI%CDF)) CALL CLEANIOCDF(TZFDLFI%CDF) + IF (ASSOCIATED(TPFILE%TNCDIMS)) CALL CLEANIOCDF(TPFILE%TNCDIMS) IF (IRESP == 0) THEN !! Write in pipe #if defined(MNH_LINUX) || defined(MNH_SP4) diff --git a/src/LIB/SURCOUCHE/src/mode_io.f90 b/src/LIB/SURCOUCHE/src/mode_io.f90 index f1699a77f..32602066c 100644 --- a/src/LIB/SURCOUCHE/src/mode_io.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io.f90 @@ -698,9 +698,10 @@ CONTAINS IF (LIOCDF4) THEN IF (YACTION == 'READ' .AND. .NOT. LLFIREAD) THEN ! Open NetCDF File for reading - TZFD_IOZ%CDF => NEWIOCDF() + TZSPLITFILE%TNCDIMS => NEWIOCDF() CALL PRINT_MSG(NVERB_DEBUG,'IO','OPEN_ll','NF90_OPEN(IO_ZSPLIT) for '//TRIM(TPFILE%CNAME)//cfile//'.nc') - IOSCDF = NF90_OPEN(TRIM(TPFILE%CNAME)//cfile//".nc", NF90_NOWRITE, TZFD_IOZ%CDF%NCID) + IOSCDF = NF90_OPEN(TRIM(TPFILE%CNAME)//cfile//".nc", NF90_NOWRITE, TZSPLITFILE%NNCID) + TZSPLITFILE%TNCDIMS%NCID = TZSPLITFILE%NNCID IF (IOSCDF /= NF90_NOERR) THEN PRINT *, 'Error in opening (NF90_OPEN) ', TRIM(TPFILE%CNAME)//cfile//'.nc', ' : ', NF90_STRERROR(IOSCDF) STOP @@ -712,10 +713,11 @@ CONTAINS IF (YACTION == 'WRITE') THEN ! YACTION == 'WRITE' ! Create NetCDF File for writing - TZFD_IOZ%CDF => NEWIOCDF() + TZSPLITFILE%TNCDIMS => NEWIOCDF() CALL PRINT_MSG(NVERB_DEBUG,'IO','OPEN_ll','NF90_CREATE(IO_ZSPLIT) for '//TRIM(TPFILE%CNAME)//cfile//'.nc') IOSCDF = NF90_CREATE(TRIM(TPFILE%CNAME)//cfile//".nc", & - &IOR(NF90_CLOBBER,NF90_NETCDF4), TZFD_IOZ%CDF%NCID) + &IOR(NF90_CLOBBER,NF90_NETCDF4), TZSPLITFILE%NNCID) + TZSPLITFILE%TNCDIMS%NCID = TZSPLITFILE%NNCID IF (IOSCDF /= NF90_NOERR) THEN PRINT *, 'Error in opening (NF90_CREATE) ', TRIM(TPFILE%CNAME)//cfile//'.nc', ' : ', NF90_STRERROR(IOSCDF) STOP @@ -769,7 +771,6 @@ CONTAINS END SELECT print *,'PW: TPFILE%CNAME=',TPFILE%CNAME,'master,multimasters=',TPFILE%LMASTER,TPFILE%LMULTIMASTERS -!PW: not done here because TZFDLFI%CDF not yet set ! CALL UPDATE_METADATA(TPFILE) ! Recherche d'un communicateur a reutiliser @@ -831,7 +832,7 @@ print *,'PW: TPFILE%CNAME=',TPFILE%CNAME,'master,multimasters=',TPFILE%LMASTER,T !TZFDLFI%CDF exists only if ISP == TZFDLFI%OWNER IF (TRIM(TPFILEMD%CMODE) == 'READ' .AND. ISP == TPFILEMD%NMASTER_RANK) THEN IF (LIOCDF4 .AND. .NOT.LLFIREAD) THEN - TPFILEMD%NNCID = TZFDLFI%CDF%NCID +! TPFILEMD%NNCID = TZFDLFI%CDF%NCID IF (TPFILEMD%NNCID<0) CALL PRINT_MSG(NVERB_FATAL,'IO','OPEN_ll::UPDATE_METADATA','invalid NNCID for '& //TRIM(TPFILEMD%CNAME)) ELSE @@ -841,7 +842,7 @@ print *,'PW: TPFILE%CNAME=',TPFILE%CNAME,'master,multimasters=',TPFILE%LMASTER,T ENDIF ELSE IF (TRIM(TPFILEMD%CMODE) == 'WRITE' .AND. ISP == TPFILEMD%NMASTER_RANK) THEN IF (LIOCDF4) THEN - TPFILEMD%NNCID = TZFDLFI%CDF%NCID +! TPFILEMD%NNCID = TZFDLFI%CDF%NCID IF (TPFILEMD%NNCID<0) CALL PRINT_MSG(NVERB_FATAL,'IO','OPEN_ll::UPDATE_METADATA','invalid NNCID for '& //TRIM(TPFILEMD%CNAME)) END IF @@ -860,6 +861,7 @@ print *,'PW: TPFILE%CNAME=',TPFILE%CNAME,'master,multimasters=',TPFILE%LMASTER,T SUBROUTINE CLOSE_ll(HFILE,IOSTAT,STATUS,OPARALLELIO) USE MODD_IO_ll + USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME #if defined(MNH_IOCDF4) USE MODE_NETCDF #endif @@ -882,6 +884,7 @@ print *,'PW: TPFILE%CNAME=',TPFILE%CNAME,'master,multimasters=',TPFILE%LMASTER,T INTEGER(KIND=LFI_INT) :: IRESP8,INUM8 CHARACTER(LEN=7) :: YSTATU LOGICAL :: GPARALLELIO + TYPE(TFILEDATA),POINTER :: TZFILE CALL PRINT_MSG(NVERB_DEBUG,'IO','CLOSE_ll','closing '//TRIM(HFILE)) @@ -934,6 +937,7 @@ print *,'PW: TPFILE%CNAME=',TPFILE%CNAME,'master,multimasters=',TPFILE%LMASTER,T ilen = len_trim(TZFD%NAME) YFILE_IOZ = TRIM(TZFD%NAME(1:ilen-4))//yfile//".lfi" TZFD_IOZ => GETFD(YFILE_IOZ) + CALL IO_FILE_FIND_BYNAME(TRIM(TZFD%NAME(1:ilen-4))//yfile,TZFILE,IRESP) IF (ISP == TZFD_IOZ%OWNER) THEN IF (TZFD_IOZ%FLU > 0) THEN INUM8=TZFD_IOZ%FLU @@ -941,7 +945,7 @@ print *,'PW: TPFILE%CNAME=',TPFILE%CNAME,'master,multimasters=',TPFILE%LMASTER,T CALL IOFREEFLU(TZFD_IOZ%FLU) IRESP = IRESP8 END IF - IF (ASSOCIATED(TZFD_IOZ%CDF)) CALL CLEANIOCDF(TZFD_IOZ%CDF) + IF (ASSOCIATED(TZFILE%TNCDIMS)) CALL CLEANIOCDF(TZFILE%TNCDIMS) END IF END DO END IF -- GitLab