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