diff --git a/src/LIB/SURCOUCHE/src/modd_netcdf.f90 b/src/LIB/SURCOUCHE/src/modd_netcdf.f90
index 81850b10faaceebba13ec3ef2abf929b34949398..58fa97adf15f51e86fc405fbcc6554b1753bd423 100644
--- a/src/LIB/SURCOUCHE/src/modd_netcdf.f90
+++ b/src/LIB/SURCOUCHE/src/modd_netcdf.f90
@@ -4,7 +4,6 @@ IMPLICIT NONE
 INTEGER,PARAMETER :: IDCDF_KIND = SELECTED_INT_KIND(8)
 
 TYPE IOCDF
-   INTEGER(KIND=IDCDF_KIND) :: NCID
    TYPE(DIMCDF), POINTER :: DIMX
    TYPE(DIMCDF), POINTER :: DIMY
    TYPE(DIMCDF), POINTER :: DIMZ
diff --git a/src/LIB/SURCOUCHE/src/mode_fm.f90 b/src/LIB/SURCOUCHE/src/mode_fm.f90
index 2a7d97bd0dea403d82a635b222a5e6d2f841aeb8..ff77129ff1868a64a8939d01f755899435b16025 100644
--- a/src/LIB/SURCOUCHE/src/mode_fm.f90
+++ b/src/LIB/SURCOUCHE/src/mode_fm.f90
@@ -331,7 +331,6 @@ IF (TPFILE%LMASTER) THEN
            PRINT *, 'Error in opening (FMOPEN_ll/NF90_OPEN) ', TRIM(YFILEM)//'.nc', ' : ', NF90_STRERROR(INCERR)
            STOP
         END IF
-        TPFILE%TNCDIMS%NCID = TPFILE%NNCID
      END IF
      
      IF (YACTION == 'WRITE') THEN
@@ -344,7 +343,6 @@ IF (TPFILE%LMASTER) THEN
            PRINT *, 'Error in opening (FMOPEN_ll/NF90_CREATE) ', TRIM(YFILEM)//'.nc', ' : ', NF90_STRERROR(INCERR)
            STOP
         END IF
-        TPFILE%TNCDIMS%NCID = TPFILE%NNCID
      END IF
   END IF
 #endif
diff --git a/src/LIB/SURCOUCHE/src/mode_io.f90 b/src/LIB/SURCOUCHE/src/mode_io.f90
index 8c2d65a50bde08bd1ef53d676c49e1fb0d2de77c..8cfa6aefb8b510f8749fb38376fb5e388e4224ba 100644
--- a/src/LIB/SURCOUCHE/src/mode_io.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io.f90
@@ -645,7 +645,6 @@ CONTAINS
                       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, 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
@@ -661,7 +660,6 @@ CONTAINS
                       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), 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
diff --git a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 b/src/LIB/SURCOUCHE/src/mode_netcdf.f90
index 61b4ce68b6d76b6a268ff02cca88a0d209420d17..b7f2835b30bc1807e6ac0b5e03f716a5f9a9f913 100644
--- a/src/LIB/SURCOUCHE/src/mode_netcdf.f90
+++ b/src/LIB/SURCOUCHE/src/mode_netcdf.f90
@@ -74,7 +74,6 @@ IF (IRESP > 0) THEN
   STOP
 END IF
 
-TZIOCDF%NCID = -1
 NULLIFY(TZIOCDF%DIMX)
 NULLIFY(TZIOCDF%DIMY)
 NULLIFY(TZIOCDF%DIMZ)
@@ -255,8 +254,8 @@ ENDIF
 !
 END SUBROUTINE IO_WRITE_FIELD_ATTR_NC4
 
-FUNCTION GETDIMCDF(PIOCDF, KLEN, HDIMNAME)
-TYPE(IOCDF), POINTER       :: PIOCDF
+FUNCTION GETDIMCDF(TPFILE, KLEN, HDIMNAME)
+TYPE(TFILEDATA),         INTENT(IN) :: TPFILE
 INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: KLEN
 CHARACTER(LEN=*), OPTIONAL :: HDIMNAME ! When provided don't search but
                                        ! simply create with name HDIMNAME
@@ -268,6 +267,9 @@ CHARACTER(LEN=7)      :: YSUFFIX
 CHARACTER(LEN=8)      :: YDIMNAME
 CHARACTER(LEN=20)     :: YLEN
 INTEGER(KIND=IDCDF_KIND) :: STATUS
+TYPE(IOCDF), POINTER     :: PIOCDF
+
+PIOCDF => TPFILE%TNCDIMS
 
 IF (KLEN < 1) THEN
   WRITE(YLEN,*) KLEN
@@ -295,7 +297,7 @@ IF (.NOT. ASSOCIATED(TMP)) THEN
    ALLOCATE(TMP)
    TMP%NAME = YDIMNAME
    TMP%LEN = KLEN
-   STATUS = NF90_DEF_DIM(PIOCDF%NCID, TMP%NAME, KLEN, TMP%ID)
+   STATUS = NF90_DEF_DIM(TPFILE%NNCID, TMP%NAME, KLEN, TMP%ID)
    IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'GETDIMCDF[NF90_DEF_DIM]')
    NULLIFY(TMP%NEXT)
    TMP%NEXT       => PIOCDF%DIMLIST
@@ -306,8 +308,8 @@ GETDIMCDF => TMP
 
 END FUNCTION GETDIMCDF
 
-FUNCTION GETSTRDIMID(PIOCDF, KLEN)
-TYPE(IOCDF), POINTER    :: PIOCDF
+FUNCTION GETSTRDIMID(TPFILE,KLEN)
+TYPE(TFILEDATA),         INTENT(IN) :: TPFILE
 INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: KLEN
 INTEGER(KIND=IDCDF_KIND)            :: GETSTRDIMID
 
@@ -323,7 +325,7 @@ IF (KLEN < 1) THEN
 END IF
 
 ! Search string dimension with KLEN length
-TMP  => PIOCDF%DIMSTR
+TMP  => TPFILE%TNCDIMS%DIMSTR
 DO WHILE(ASSOCIATED(TMP))
    IF (TMP%LEN == KLEN) EXIT
    TMP=>TMP%NEXT
@@ -336,73 +338,76 @@ IF (.NOT. ASSOCIATED(TMP)) THEN
    ALLOCATE(TMP)
    TMP%NAME = YDIMNAME
    TMP%LEN = KLEN
-   STATUS = NF90_DEF_DIM(PIOCDF%NCID, TMP%NAME, KLEN, TMP%ID)
+   STATUS = NF90_DEF_DIM(TPFILE%NNCID, TMP%NAME, KLEN, TMP%ID)
    IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'GETSTRDIMID[NF90_DEF_DIM]')
    NULLIFY(TMP%NEXT)
-   TMP%NEXT      => PIOCDF%DIMSTR
-   PIOCDF%DIMSTR => TMP
+   TMP%NEXT      => TPFILE%TNCDIMS%DIMSTR
+   TPFILE%TNCDIMS%DIMSTR => TMP
 END IF
 
 GETSTRDIMID = TMP%ID
 
 END FUNCTION GETSTRDIMID
 
-SUBROUTINE FILLVDIMS(PIOCDF, KSHAPE, HDIR, KVDIMS)
-TYPE(IOCDF),           POINTER        :: PIOCDF 
+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
 
 INTEGER :: II
 TYPE(DIMCDF), POINTER :: PTDIM
+TYPE(IOCDF),  POINTER :: PIOCDF
 
 IF (SIZE(KSHAPE) < 1) CALL PRINT_MSG(NVERB_FATAL,'IO','FILLVDIMS','empty KSHAPE')
 
+PIOCDF => TPFILE%TNCDIMS
+
 DO II=1, SIZE(KSHAPE)
 
    IF (II == 1) THEN
       IF (HDIR == 'XX' .OR. HDIR == 'XY') THEN
-         IF (.NOT. ASSOCIATED(PIOCDF%DIMX))  PIOCDF%DIMX => GETDIMCDF(PIOCDF, KSHAPE(II), 'X')
+         IF (.NOT. ASSOCIATED(PIOCDF%DIMX))  PIOCDF%DIMX => GETDIMCDF(TPFILE, KSHAPE(II), 'X')
          IF (KSHAPE(II) == PIOCDF%DIMX%LEN) THEN
             PTDIM => PIOCDF%DIMX
          ELSE
-            PTDIM => GETDIMCDF(PIOCDF, KSHAPE(II))
+            PTDIM => GETDIMCDF(TPFILE, KSHAPE(II))
          END IF
       ELSE IF (HDIR == 'YY') THEN
-         IF (.NOT. ASSOCIATED(PIOCDF%DIMY))  PIOCDF%DIMY => GETDIMCDF(PIOCDF, KSHAPE(II), 'Y')
+         IF (.NOT. ASSOCIATED(PIOCDF%DIMY))  PIOCDF%DIMY => GETDIMCDF(TPFILE, KSHAPE(II), 'Y')
          IF (KSHAPE(II) == PIOCDF%DIMY%LEN) THEN
             PTDIM => PIOCDF%DIMY
          ELSE
-            PTDIM => GETDIMCDF(PIOCDF, KSHAPE(II))
+            PTDIM => GETDIMCDF(TPFILE, KSHAPE(II))
          END IF
       ELSE
-         PTDIM => GETDIMCDF(PIOCDF, KSHAPE(II))
+         PTDIM => GETDIMCDF(TPFILE, KSHAPE(II))
          KVDIMS(II) = PTDIM%ID
       END IF
    ELSE IF (II == 2) THEN
       IF (HDIR == 'XY') THEN
-         IF (.NOT. ASSOCIATED(PIOCDF%DIMY))  PIOCDF%DIMY => GETDIMCDF(PIOCDF, KSHAPE(II), 'Y')
+         IF (.NOT. ASSOCIATED(PIOCDF%DIMY))  PIOCDF%DIMY => GETDIMCDF(TPFILE, KSHAPE(II), 'Y')
          IF (KSHAPE(II) == PIOCDF%DIMY%LEN) THEN
             PTDIM => PIOCDF%DIMY
          ELSE
-            PTDIM => GETDIMCDF(PIOCDF, KSHAPE(II))
+            PTDIM => GETDIMCDF(TPFILE, KSHAPE(II))
          END IF
       ELSE
-         PTDIM => GETDIMCDF(PIOCDF, KSHAPE(II))
+         PTDIM => GETDIMCDF(TPFILE, KSHAPE(II))
       END IF
    ELSE IF (II == 3) THEN
       IF (HDIR == 'XY') THEN
-         IF (.NOT. ASSOCIATED(PIOCDF%DIMZ))  PIOCDF%DIMZ => GETDIMCDF(PIOCDF, KSHAPE(II), 'Z')
+         IF (.NOT. ASSOCIATED(PIOCDF%DIMZ))  PIOCDF%DIMZ => GETDIMCDF(TPFILE, KSHAPE(II), 'Z')
          IF (KSHAPE(II) == PIOCDF%DIMZ%LEN) THEN
             PTDIM => PIOCDF%DIMZ
          ELSE
-            PTDIM => GETDIMCDF(PIOCDF, KSHAPE(II))
+            PTDIM => GETDIMCDF(TPFILE, KSHAPE(II))
          END IF
       ELSE
-         PTDIM => GETDIMCDF(PIOCDF, KSHAPE(II))
+         PTDIM => GETDIMCDF(TPFILE, KSHAPE(II))
       END IF
    ELSE
-      PTDIM => GETDIMCDF(PIOCDF, KSHAPE(II))
+      PTDIM => GETDIMCDF(TPFILE, KSHAPE(II))
    END IF
    
    KVDIMS(II) = PTDIM%ID
@@ -485,7 +490,7 @@ IF (STATUS /= NF90_NOERR) THEN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(TPFILE%TNCDIMS, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS)
+   CALL FILLVDIMS(TPFILE, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS)
 
    ! Define the variable 
    IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN
@@ -564,7 +569,7 @@ IF (STATUS /= NF90_NOERR) THEN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(TZFILE%TNCDIMS, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS)
+   CALL FILLVDIMS(TZFILE, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS)
 
    ! Define the variable 
    IF (TZFILE%LNCREDUCE_FLOAT_PRECISION) THEN
@@ -625,7 +630,7 @@ IF (STATUS /= NF90_NOERR) THEN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(TPFILE%TNCDIMS, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS)
+   CALL FILLVDIMS(TPFILE, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS)
 
    ! Define the variable 
    IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN
@@ -686,7 +691,7 @@ IF (STATUS /= NF90_NOERR) THEN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(TPFILE%TNCDIMS, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS)
+   CALL FILLVDIMS(TPFILE, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS)
 
    ! Define the variable 
    IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN
@@ -747,7 +752,7 @@ IF (STATUS /= NF90_NOERR) THEN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(TPFILE%TNCDIMS, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS)
+   CALL FILLVDIMS(TPFILE, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS)
 
    ! Define the variable 
    IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN
@@ -808,7 +813,7 @@ IF (STATUS /= NF90_NOERR) THEN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(TPFILE%TNCDIMS, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS)
+   CALL FILLVDIMS(TPFILE, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS)
 
    ! Define the variable 
    IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN
@@ -891,14 +896,14 @@ IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_N0
 IF (YVARNAME == 'IMAX' .AND. .NOT. ASSOCIATED(TPFILE%TNCDIMS%DIMX)) TPFILE%TNCDIMS%DIMX=>GETDIMCDF(TPFILE%TNCDIMS,KFIELD+2*JPHEXT,'X')
 IF (YVARNAME == 'JMAX' .AND. .NOT. ASSOCIATED(TPFILE%TNCDIMS%DIMY)) THEN
    IF (LPACK .AND. L2D) THEN
-      TPFILE%TNCDIMS%DIMY=>GETDIMCDF(TPFILE%TNCDIMS, 1,'Y')
+      TPFILE%TNCDIMS%DIMY=>GETDIMCDF(TPFILE, 1,'Y')
    ELSE
-      TPFILE%TNCDIMS%DIMY=>GETDIMCDF(TPFILE%TNCDIMS, KFIELD+2*JPHEXT, 'Y')
+      TPFILE%TNCDIMS%DIMY=>GETDIMCDF(TPFILE, KFIELD+2*JPHEXT, 'Y')
    END IF
 END IF
 #endif
 IF (YVARNAME == 'KMAX' .AND. .NOT. ASSOCIATED(TPFILE%TNCDIMS%DIMZ)) &
-  TPFILE%TNCDIMS%DIMZ=>GETDIMCDF(TPFILE%TNCDIMS,INT(KFIELD+2*JPVEXT,KIND=IDCDF_KIND),'Z')
+  TPFILE%TNCDIMS%DIMZ=>GETDIMCDF(TPFILE,INT(KFIELD+2*JPVEXT,KIND=IDCDF_KIND),'Z')
  
 KRESP = IRESP
 END SUBROUTINE IO_WRITE_FIELD_NC4_N0
@@ -942,7 +947,7 @@ IF (STATUS /= NF90_NOERR) THEN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(TPFILE%TNCDIMS, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS)
+   CALL FILLVDIMS(TPFILE, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS)
 
    ! Define the variable 
 #ifndef MNH_INT8
@@ -998,7 +1003,7 @@ IF (STATUS /= NF90_NOERR) THEN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(TPFILE%TNCDIMS, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS)
+   CALL FILLVDIMS(TPFILE, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS)
 
    ! Define the variable 
 #ifndef MNH_INT8
@@ -1058,7 +1063,7 @@ IF (STATUS /= NF90_NOERR) THEN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(TPFILE%TNCDIMS, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS)
+   CALL FILLVDIMS(TPFILE, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS)
 
    ! Define the variable 
 #ifndef MNH_INT8
@@ -1171,7 +1176,7 @@ IF (STATUS /= NF90_NOERR) THEN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(TPFILE%TNCDIMS, INT(SHAPE(OFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS)
+   CALL FILLVDIMS(TPFILE, INT(SHAPE(OFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS)
 
    ! Define the variable 
    ! Use of NF90_INT1 datatype (=NF90_BYTE) that is enough to store a boolean
@@ -1234,7 +1239,7 @@ CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    ! Get the netcdf string dimensions id 
-   IVDIMS(1) = GETSTRDIMID(TPFILE%TNCDIMS,INT(ILEN,KIND=IDCDF_KIND))
+   IVDIMS(1) = GETSTRDIMID(TPFILE,INT(ILEN,KIND=IDCDF_KIND))
    ! 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_C0[NF90_DEF_VAR]')
@@ -1288,8 +1293,8 @@ CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    ! Get the netcdf string dimensions id 
-   IVDIMS(1) = GETSTRDIMID(TPFILE%TNCDIMS,ILEN)
-   CALL FILLVDIMS(TPFILE%TNCDIMS, (/ISIZE/), TPFIELD%CDIR, IVDIMS(2:2))
+   IVDIMS(1) = GETSTRDIMID(TPFILE,ILEN)
+   CALL FILLVDIMS(TPFILE, (/ISIZE/), TPFIELD%CDIR, 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]')
@@ -1381,7 +1386,7 @@ TZFIELD%CCOMMENT  = 'YYYYMMDD'
 STATUS = NF90_INQ_VARID(INCID, TZFIELD%CMNHNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(TPFILE%TNCDIMS, INT(SHAPE(ITDATE),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS)
+   CALL FILLVDIMS(TPFILE, INT(SHAPE(ITDATE),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS)
 
    ! Define the variable 
    STATUS = NF90_DEF_VAR(INCID, TZFIELD%CMNHNAME, NF90_INT, IVDIMS, IVARID)