From debcbc0af68096e31519b49208531af856ec3984 Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Thu, 6 Apr 2017 09:15:53 +0200 Subject: [PATCH] Philippe 06/03/2017: IO: read a degenerated 3D array (3rd size=1) into a 2D array --- src/LIB/SURCOUCHE/src/mode_netcdf.f90 | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 b/src/LIB/SURCOUCHE/src/mode_netcdf.f90 index a8b2293ed..1b63a2bf8 100644 --- a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 +++ b/src/LIB/SURCOUCHE/src/mode_netcdf.f90 @@ -1923,7 +1923,8 @@ CHARACTER(LEN=30) :: YVARNAME INTEGER(KIND=IDCDF_KIND) :: IVARID INTEGER(KIND=IDCDF_KIND) :: ITYPE ! variable type INTEGER(KIND=IDCDF_KIND) :: IDIMS ! number of dimensions -INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS +!INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS +INTEGER(KIND=IDCDF_KIND), DIMENSION(3) :: IVDIMS INTEGER(KIND=IDCDF_KIND) :: ICOMLEN ! comment length INTEGER :: IVARSIZE INTEGER(KIND=IDCDF_KIND) :: IDIMLEN @@ -1944,9 +1945,22 @@ IF (STATUS /= NF90_NOERR) THEN CALL HANDLE_ERR(status,__LINE__,'NCREADX2[NF90_INQ_VARID] '//TRIM(YVARNAME),IRESP) GOTO 1000 END IF + STATUS = NF90_INQUIRE_VARIABLE(KNCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS) IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'NCREADX2[NF90_INQUIRE_VARIABLE] '//TRIM(YVARNAME)) +!Treat special case of a degenerated 3D array (3rd dimension size is 1) +IF (IDIMS==3) THEN + STATUS = NF90_INQUIRE_DIMENSION(KNCID, IVDIMS(3), LEN=IDIMLEN) + IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCREADX2[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) + IF (IDIMLEN==1) THEN + CALL PRINT_MSG(NVERB_INFO,'IO','NCREADX2','reading 3D array with degenerated third dimension in 2D array for '//TRIM(HVARNAME)) + IDIMS = 2 + ELSE + CALL PRINT_MSG(NVERB_FATAL,'IO','NCREADX2','wrong number of dimensions for '//TRIM(HVARNAME)) + END IF +END IF + IF (IDIMS == SIZE(SHAPE(PFIELD)) .AND. ITYPE == NF90_DOUBLE) THEN ! Check size of variable before reading IVARSIZE = 1 -- GitLab