From d2541aa1002e152598d70e572947d9292ac052f4 Mon Sep 17 00:00:00 2001
From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Date: Tue, 16 Jan 2018 14:14:27 +0100
Subject: [PATCH] Philippe 16/01/2018: IO: provide FIELD structure to FILLVDIMS

---
 src/LIB/SURCOUCHE/src/mode_netcdf.f90 | 44 ++++++++++++++-------------
 1 file changed, 23 insertions(+), 21 deletions(-)

diff --git a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 b/src/LIB/SURCOUCHE/src/mode_netcdf.f90
index 3740c2a28..4e12b6b4a 100644
--- a/src/LIB/SURCOUCHE/src/mode_netcdf.f90
+++ b/src/LIB/SURCOUCHE/src/mode_netcdf.f90
@@ -590,13 +590,14 @@ GETSTRDIMID = TMP%ID
 
 END FUNCTION GETSTRDIMID
 
-SUBROUTINE FILLVDIMS(TPFILE, KSHAPE, HDIR, KVDIMS)
-TYPE(TFILEDATA),                        INTENT(IN) :: TPFILE
-INTEGER(KIND=IDCDF_KIND), DIMENSION(:), INTENT(IN) :: KSHAPE
-CHARACTER(LEN=*),      INTENT(IN)     :: HDIR
-INTEGER(KIND=IDCDF_KIND),DIMENSION(:), INTENT(OUT) :: KVDIMS
+SUBROUTINE FILLVDIMS(TPFILE, TPFIELD, KSHAPE, KVDIMS)
+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
 
 INTEGER :: II
+CHARACTER(LEN=2)      :: YDIR
 TYPE(DIMCDF), POINTER :: PTDIM
 TYPE(IOCDF),  POINTER :: PIOCDF
 
@@ -604,18 +605,19 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','FILLVDIMS','called')
 
 IF (SIZE(KSHAPE) < 1) CALL PRINT_MSG(NVERB_FATAL,'IO','FILLVDIMS','empty KSHAPE')
 
+YDIR = TPFIELD%CDIR
 PIOCDF => TPFILE%TNCDIMS
 
 DO II=1, SIZE(KSHAPE)
 
    IF (II == 1) THEN
-      IF (HDIR == 'XX' .OR. HDIR == 'XY') THEN
+      IF (YDIR == 'XX' .OR. YDIR == 'XY') THEN
          IF (KSHAPE(II) == PIOCDF%DIM_NI%LEN) THEN
             PTDIM => PIOCDF%DIM_NI
          ELSE
             PTDIM => GETDIMCDF(TPFILE, KSHAPE(II))
          END IF
-      ELSE IF (HDIR == 'YY') THEN
+      ELSE IF (YDIR == 'YY') THEN
          IF (KSHAPE(II) == PIOCDF%DIM_NJ%LEN) THEN
             PTDIM => PIOCDF%DIM_NJ
          ELSE
@@ -626,7 +628,7 @@ DO II=1, SIZE(KSHAPE)
          KVDIMS(II) = PTDIM%ID
       END IF
    ELSE IF (II == 2) THEN
-      IF (HDIR == 'XY') THEN
+      IF (YDIR == 'XY') THEN
          IF (KSHAPE(II) == PIOCDF%DIM_NJ%LEN) THEN
             PTDIM => PIOCDF%DIM_NJ
          ELSE
@@ -636,7 +638,7 @@ DO II=1, SIZE(KSHAPE)
          PTDIM => GETDIMCDF(TPFILE, KSHAPE(II))
       END IF
    ELSE IF (II == 3) THEN
-      IF (HDIR == 'XY') THEN
+      IF (YDIR == 'XY') THEN
          IF (KSHAPE(II) == PIOCDF%DIM_LEVEL%LEN) THEN
             PTDIM => PIOCDF%DIM_LEVEL
          ELSE
@@ -729,7 +731,7 @@ IF (STATUS /= NF90_NOERR) THEN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(TPFILE, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS)
+   CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS)
 
    ! Define the variable 
    IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN
@@ -808,7 +810,7 @@ IF (STATUS /= NF90_NOERR) THEN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(TZFILE, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS)
+   CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS)
 
    ! Define the variable 
    IF (TZFILE%LNCREDUCE_FLOAT_PRECISION) THEN
@@ -869,7 +871,7 @@ IF (STATUS /= NF90_NOERR) THEN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(TPFILE, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS)
+   CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS)
 
    ! Define the variable 
    IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN
@@ -930,7 +932,7 @@ IF (STATUS /= NF90_NOERR) THEN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(TPFILE, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS)
+   CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS)
 
    ! Define the variable 
    IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN
@@ -991,7 +993,7 @@ IF (STATUS /= NF90_NOERR) THEN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(TPFILE, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS)
+   CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS)
 
    ! Define the variable 
    IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN
@@ -1052,7 +1054,7 @@ IF (STATUS /= NF90_NOERR) THEN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(TPFILE, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS)
+   CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS)
 
    ! Define the variable 
    IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN
@@ -1186,7 +1188,7 @@ IF (STATUS /= NF90_NOERR) THEN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(TPFILE, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS)
+   CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), IVDIMS)
 
    ! Define the variable 
 #ifndef MNH_INT8
@@ -1242,7 +1244,7 @@ IF (STATUS /= NF90_NOERR) THEN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(TPFILE, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS)
+   CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), IVDIMS)
 
    ! Define the variable 
 #ifndef MNH_INT8
@@ -1302,7 +1304,7 @@ IF (STATUS /= NF90_NOERR) THEN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(TPFILE, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS)
+   CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), IVDIMS)
 
    ! Define the variable 
 #ifndef MNH_INT8
@@ -1415,7 +1417,7 @@ IF (STATUS /= NF90_NOERR) THEN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(TPFILE, INT(SHAPE(OFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS)
+   CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(OFIELD),KIND=IDCDF_KIND), IVDIMS)
 
    ! Define the variable 
    ! Use of NF90_INT1 datatype (=NF90_BYTE) that is enough to store a boolean
@@ -1533,7 +1535,7 @@ STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    ! Get the netcdf string dimensions id 
    IVDIMS(1) = GETSTRDIMID(TPFILE,ILEN)
-   CALL FILLVDIMS(TPFILE, (/ISIZE/), TPFIELD%CDIR, IVDIMS(2:2))
+   CALL FILLVDIMS(TPFILE, TPFIELD, (/ISIZE/), IVDIMS(2:2))
    ! Define the variable 
    STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_CHAR, IVDIMS, IVARID)
    IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_C1[NF90_DEF_VAR]')
@@ -1625,7 +1627,7 @@ TZFIELD%CCOMMENT  = 'YYYYMMDD'
 STATUS = NF90_INQ_VARID(INCID, TZFIELD%CMNHNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(TPFILE, INT(SHAPE(ITDATE),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS)
+   CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(ITDATE),KIND=IDCDF_KIND), IVDIMS)
 
    ! Define the variable 
    STATUS = NF90_DEF_VAR(INCID, TZFIELD%CMNHNAME, NF90_INT, IVDIMS, IVARID)
-- 
GitLab