From 071e82726435d7cf271575117da1434ec7b9611c Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Mon, 22 Jan 2018 11:34:20 +0100 Subject: [PATCH] Philippe 22/01/2018: IO: correct problems for Z-splitted files --- src/LIB/SURCOUCHE/src/mode_io.f90 | 4 ++-- src/LIB/SURCOUCHE/src/mode_netcdf.f90 | 29 +++++++++++++++++++++------ 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/LIB/SURCOUCHE/src/mode_io.f90 b/src/LIB/SURCOUCHE/src/mode_io.f90 index a8df4bfb7..6c05448ac 100644 --- a/src/LIB/SURCOUCHE/src/mode_io.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io.f90 @@ -666,8 +666,8 @@ CONTAINS ELSE IOS = 0 END IF - CALL IO_SET_KNOWNDIMS_NC4(TPFILE) - CALL IO_WRITE_COORDVAR_NC4(TPFILE) + CALL IO_SET_KNOWNDIMS_NC4(TZSPLITFILE) + CALL IO_WRITE_COORDVAR_NC4(TZSPLITFILE) END IF END IF #endif diff --git a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 b/src/LIB/SURCOUCHE/src/mode_netcdf.f90 index d18b25ed3..cced7d932 100644 --- a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 +++ b/src/LIB/SURCOUCHE/src/mode_netcdf.f90 @@ -637,16 +637,18 @@ GETSTRDIMID = TMP%ID END FUNCTION GETSTRDIMID -SUBROUTINE FILLVDIMS(TPFILE, TPFIELD, KSHAPE, KVDIMS) +SUBROUTINE FILLVDIMS(TPFILE, TPFIELD, KSHAPE, KVDIMS, OSPLIT) TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD INTEGER(KIND=IDCDF_KIND),DIMENSION(:),INTENT(IN) :: KSHAPE INTEGER(KIND=IDCDF_KIND),DIMENSION(:),INTENT(OUT) :: KVDIMS +LOGICAL, OPTIONAL, INTENT(IN) :: OSPLIT ! INTEGER :: IGRID INTEGER :: JI CHARACTER(LEN=32) :: YINT CHARACTER(LEN=2) :: YDIR +LOGICAL :: GSPLIT TYPE(DIMCDF), POINTER :: PTDIM ! CALL PRINT_MSG(NVERB_DEBUG,'IO','FILLVDIMS','called for '//TRIM(TPFIELD%CMNHNAME)) @@ -656,9 +658,21 @@ IF (SIZE(KSHAPE) < 1) CALL PRINT_MSG(NVERB_FATAL,'IO','FILLVDIMS','empty KSHAPE' IGRID = TPFIELD%NGRID YDIR = TPFIELD%CDIR ! -IF(SIZE(KSHAPE)/=TPFIELD%NDIMS) THEN - WRITE(YINT,'( I0,"/",I0 )') SIZE(KSHAPE),TPFIELD%NDIMS - CALL PRINT_MSG(NVERB_FATAL,'IO','FILLVDIMS','SIZE(KSHAPE)/=TPFIELD%NDIMS ('//TRIM(YINT)//') for field '//TRIM(TPFIELD%CMNHNAME)) +GSPLIT = .FALSE. +IF (PRESENT(OSPLIT)) GSPLIT = OSPLIT +! +IF (GSPLIT) THEN + IF(SIZE(KSHAPE)/=(TPFIELD%NDIMS-1)) THEN + WRITE(YINT,'( I0,"/",I0 )') SIZE(KSHAPE),TPFIELD%NDIMS-1 + CALL PRINT_MSG(NVERB_FATAL,'IO','FILLVDIMS','SIZE(KSHAPE)/=TPFIELD%NDIMS-1 ('//TRIM(YINT)//') for field ' & + //TRIM(TPFIELD%CMNHNAME)) + END IF +ELSE + IF(SIZE(KSHAPE)/=TPFIELD%NDIMS) THEN + WRITE(YINT,'( I0,"/",I0 )') SIZE(KSHAPE),TPFIELD%NDIMS + CALL PRINT_MSG(NVERB_FATAL,'IO','FILLVDIMS','SIZE(KSHAPE)/=TPFIELD%NDIMS ('//TRIM(YINT)//') for field ' & + //TRIM(TPFIELD%CMNHNAME)) + END IF END IF ! IF(IGRID<0 .OR. IGRID>4) THEN @@ -670,7 +684,7 @@ IF(IGRID==0 .AND. YDIR/='--' .AND. YDIR/='' ) THEN CALL PRINT_MSG(NVERB_FATAL,'IO','FILLVDIMS','invalid YDIR ('//TRIM(YDIR)//') with NGRID=0 for field '//TRIM(TPFIELD%CMNHNAME)) END IF ! -DO JI=1,TPFIELD%NDIMS +DO JI=1,SIZE(KSHAPE) IF (JI == 1) THEN IF ( (YDIR == 'XX' .OR. YDIR == 'XY') .AND. KSHAPE(1)==NCOORDID(1,IGRID)%LEN) THEN KVDIMS(1) = NCOORDID(1,IGRID)%ID @@ -816,9 +830,11 @@ CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)+4) :: YTMP,YVARNAME INTEGER(KIND=IDCDF_KIND) :: IVARID INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS INTEGER :: IRESP +LOGICAL :: GSPLIT TYPE(TFILEDATA),POINTER :: TZFILE ! IRESP = 0 +GSPLIT = .FALSE. ! IF (PRESENT(KVERTLEVEL)) THEN WRITE(YSUFFIX,'(I4.4)') KVERTLEVEL @@ -829,6 +845,7 @@ IF (PRESENT(KVERTLEVEL)) THEN YTMP = TRIM(TPFIELD%CMNHNAME)//YSUFFIX IF (KZFILE>TPFILE%NSUBFILES_IOZ) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_WRITE_FIELD_NC4_X2','KZFILE value too high') TZFILE => TPFILE%TFILES_IOZ(KZFILE)%TFILE + GSPLIT = .TRUE. ELSE YTMP = TRIM(TPFIELD%CMNHNAME) TZFILE => TPFILE @@ -851,7 +868,7 @@ IF (STATUS /= NF90_NOERR) THEN END IF ! Get the netcdf dimensions - CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS) + CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS, GSPLIT) ! Define the variable IF (TZFILE%LNCREDUCE_FLOAT_PRECISION) THEN -- GitLab