diff --git a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 b/src/LIB/SURCOUCHE/src/mode_netcdf.f90
index 3c90ffc773b093f763c4916300b642b7917b93b3..d2de8c756c8ee314094be504f8cbb1ad4947af11 100644
--- a/src/LIB/SURCOUCHE/src/mode_netcdf.f90
+++ b/src/LIB/SURCOUCHE/src/mode_netcdf.f90
@@ -1993,159 +1993,166 @@ END SUBROUTINE IO_WRITE_FIELD_NC4_T0
 ! Here come the NetCDF READ routines
 !
 !
-SUBROUTINE IO_READ_CHECK_FIELD_ATTR_NC4(TPFIELD,KNCID,KVARID,KRESP,HCALENDAR)
+SUBROUTINE IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,KVARID,KRESP,HCALENDAR)
 !
+TYPE(TFILEDATA),          INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA),         INTENT(INOUT) :: TPFIELD
-INTEGER(KIND=IDCDF_KIND), INTENT(IN)    :: KNCID
 INTEGER(KIND=IDCDF_KIND), INTENT(IN)    :: KVARID
 INTEGER,                  INTENT(OUT)   :: KRESP  ! return-code
 CHARACTER(LEN=*),OPTIONAL,INTENT(IN)    :: HCALENDAR
 !
 INTEGER                      :: ILEN
 INTEGER                      :: IGRID
+INTEGER(KIND=IDCDF_KIND)     :: INCID
 INTEGER(KIND=IDCDF_KIND)     :: STATUS
 CHARACTER(LEN=12)            :: YVAL_FILE, YVAL_MEM
 CHARACTER(LEN=:),ALLOCATABLE :: YVALUE
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4','called for field '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)//': called for field '//TRIM(TPFIELD%CMNHNAME))
 !
 KRESP = 0
+INCID = TPFILE%NNCID
 !
 ! GRID
 !
-STATUS = NF90_GET_ATT(KNCID,KVARID,'GRID',IGRID)
+STATUS = NF90_GET_ATT(INCID,KVARID,'GRID',IGRID)
 IF (STATUS == NF90_NOERR) THEN
   IF (IGRID/=TPFIELD%NGRID) THEN
     WRITE(YVAL_FILE,'(I12)') IGRID
     WRITE(YVAL_MEM, '(I12)') TPFIELD%NGRID
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_CHECK_FIELD_ATTR_NC4','expected GRID     value ('//TRIM(ADJUSTL(YVAL_MEM))// &
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+                   ': expected GRID     value ('//TRIM(ADJUSTL(YVAL_MEM))//             &
                    ') is different than found in file ('//TRIM(ADJUSTL(YVAL_FILE))//') for variable '//TRIM(TPFIELD%CMNHNAME))
     TPFIELD%NGRID = IGRID
     KRESP = -111 !Used later to broadcast modified metadata
   ELSE
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4','expected GRID found in file for field ' &
-                                                                   //TRIM(TPFIELD%CMNHNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+                   ': expected GRID found in file for field '//TRIM(TPFIELD%CMNHNAME))
   ENDIF
 ELSE !no GRID
   IF (TPFIELD%NGRID==0 .OR. TPFIELD%NGRID==-1) THEN
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4','no GRID (as expected) in file for field ' &
-                                                                   //TRIM(TPFIELD%CMNHNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+                   ': no GRID (as expected) in file for field '//TRIM(TPFIELD%CMNHNAME))
   ELSE
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_CHECK_FIELD_ATTR_NC4','expected GRID but not found in file for field ' &
-                                                                  //TRIM(TPFIELD%CMNHNAME))
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+                   ': expected GRID but not found in file for field '//TRIM(TPFIELD%CMNHNAME))
   END IF
 ENDIF
 !
 ! COMMENT
 !
-STATUS = NF90_INQUIRE_ATTRIBUTE(KNCID, KVARID, 'COMMENT', LEN=ILEN)
+STATUS = NF90_INQUIRE_ATTRIBUTE(INCID, KVARID, 'COMMENT', LEN=ILEN)
 IF (STATUS == NF90_NOERR) THEN
   ALLOCATE(CHARACTER(LEN=ILEN) :: YVALUE)
-  STATUS = NF90_GET_ATT(KNCID, KVARID, 'COMMENT', YVALUE)
+  STATUS = NF90_GET_ATT(INCID, KVARID, 'COMMENT', YVALUE)
   IF (TRIM(YVALUE)/=TRIM(TPFIELD%CCOMMENT)) THEN
-    CALL PRINT_MSG(NVERB_INFO,'IO','IO_READ_CHECK_FIELD_ATTR_NC4','expected COMMENT ('//TRIM(TPFIELD%CCOMMENT)// &
-                   ') is different than found ('//TRIM(YVALUE)//')in file for field '//TRIM(TPFIELD%CMNHNAME))
+    CALL PRINT_MSG(NVERB_INFO,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+                   ': expected COMMENT ('//TRIM(TPFIELD%CCOMMENT)//                    &
+                   ') is different than found ('//TRIM(YVALUE)//') in file for field '//TRIM(TPFIELD%CMNHNAME))
     TPFIELD%CCOMMENT=TRIM(YVALUE)
     KRESP = -111 !Used later to broadcast modified metadata
   ELSE
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4','expected COMMENT  found in file for field ' &
-                                                                   //TRIM(TPFIELD%CMNHNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+                   ': expected COMMENT  found in file for field '//TRIM(TPFIELD%CMNHNAME))
   END IF
   DEALLOCATE(YVALUE)
 ELSE !no COMMENT
   IF (LEN_TRIM(TPFIELD%CCOMMENT)==0) THEN
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4','no COMMENT (as expected) in file for field ' &
-                                                                //TRIM(TPFIELD%CMNHNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+                   ': no COMMENT (as expected) in file for field '//TRIM(TPFIELD%CMNHNAME))
   ELSE
-    CALL PRINT_MSG(NVERB_INFO,'IO','IO_READ_CHECK_FIELD_ATTR_NC4','expected COMMENT but not found in file for field ' &
-                                                                  //TRIM(TPFIELD%CMNHNAME))
+    CALL PRINT_MSG(NVERB_INFO,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+                   ': expected COMMENT but not found in file for field '//TRIM(TPFIELD%CMNHNAME))
   END IF
 END IF
 !
 ! STDNAME
 !
-STATUS = NF90_INQUIRE_ATTRIBUTE(KNCID, KVARID, 'standard_name', LEN=ILEN)
+STATUS = NF90_INQUIRE_ATTRIBUTE(INCID, KVARID, 'standard_name', LEN=ILEN)
 IF (STATUS == NF90_NOERR) THEN
   ALLOCATE(CHARACTER(LEN=ILEN) :: YVALUE)
-  STATUS = NF90_GET_ATT(KNCID, KVARID, 'standard_name', YVALUE)
+  STATUS = NF90_GET_ATT(INCID, KVARID, 'standard_name', YVALUE)
   IF (TRIM(YVALUE)/=TRIM(TPFIELD%CSTDNAME)) THEN
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_CHECK_FIELD_ATTR_NC4','expected STDNAME  ('//TRIM(TPFIELD%CSTDNAME)// &
-                   ') is different than found ('//TRIM(YVALUE)//')in file for field '//TRIM(TPFIELD%CMNHNAME))
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+                   ': expected STDNAME  ('//TRIM(TPFIELD%CSTDNAME)//                      &
+                   ') is different than found ('//TRIM(YVALUE)//') in file for field '//TRIM(TPFIELD%CMNHNAME))
     TPFIELD%CSTDNAME=TRIM(YVALUE)
     KRESP = -111 !Used later to broadcast modified metadata
   ELSE
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4','expected STDNAME  found in file for field ' &
-                                                                   //TRIM(TPFIELD%CMNHNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+                   ': expected STDNAME  found in file for field '//TRIM(TPFIELD%CMNHNAME))
   END IF
   DEALLOCATE(YVALUE)
 ELSE !no STDNAME
   IF (LEN_TRIM(TPFIELD%CSTDNAME)==0) THEN
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4','no STDNAME (as expected) in file for field ' &
-                                                                   //TRIM(TPFIELD%CMNHNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+                   ': no STDNAME (as expected) in file for field '//TRIM(TPFIELD%CMNHNAME))
   ELSE
-    CALL PRINT_MSG(NVERB_INFO,'IO','IO_READ_CHECK_FIELD_ATTR_NC4','expected STDNAME but not found in file for field ' &
-                                                                  //TRIM(TPFIELD%CMNHNAME))
+    CALL PRINT_MSG(NVERB_INFO,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+                   ': expected STDNAME but not found in file for field '//TRIM(TPFIELD%CMNHNAME))
   END IF
 END IF
 !
 ! LONGNAME
 !
-STATUS = NF90_INQUIRE_ATTRIBUTE(KNCID, KVARID, 'long_name', LEN=ILEN)
+STATUS = NF90_INQUIRE_ATTRIBUTE(INCID, KVARID, 'long_name', LEN=ILEN)
 IF (STATUS == NF90_NOERR) THEN
   ALLOCATE(CHARACTER(LEN=ILEN) :: YVALUE)
-  STATUS = NF90_GET_ATT(KNCID, KVARID, 'long_name', YVALUE)
+  STATUS = NF90_GET_ATT(INCID, KVARID, 'long_name', YVALUE)
   IF (TRIM(YVALUE)/=TRIM(TPFIELD%CLONGNAME)) THEN
-    CALL PRINT_MSG(NVERB_INFO,'IO','IO_READ_CHECK_FIELD_ATTR_NC4','expected LONGNAME ('//TRIM(TPFIELD%CLONGNAME)// &
-                   ') is different than found ('//TRIM(YVALUE)//')in file for field '//TRIM(TPFIELD%CMNHNAME))
+    CALL PRINT_MSG(NVERB_INFO,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+                   ': expected LONGNAME ('//TRIM(TPFIELD%CLONGNAME)//                  &
+                   ') is different than found ('//TRIM(YVALUE)//') in file for field '//TRIM(TPFIELD%CMNHNAME))
     TPFIELD%CLONGNAME=TRIM(YVALUE)
     KRESP = -111 !Used later to broadcast modified metadata
   ELSE
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4','expected LONGNAME found in file for field ' &
-                                                                   //TRIM(TPFIELD%CMNHNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+                   ': expected LONGNAME found in file for field '//TRIM(TPFIELD%CMNHNAME))
   END IF
   DEALLOCATE(YVALUE)
 ELSE !no LONGNAME
   IF (LEN_TRIM(TPFIELD%CLONGNAME)==0) THEN
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4','no LONGNAME (as expected) in file for field ' &
-                                                                   //TRIM(TPFIELD%CMNHNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+                   ': no LONGNAME (as expected) in file for field '//TRIM(TPFIELD%CMNHNAME))
   ELSE
-    CALL PRINT_MSG(NVERB_INFO,'IO','IO_READ_CHECK_FIELD_ATTR_NC4','expected LONGNAME but not found in file for field ' &
-                                                                  //TRIM(TPFIELD%CMNHNAME))
+    CALL PRINT_MSG(NVERB_INFO,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+                   ': expected LONGNAME but not found in file for field '//TRIM(TPFIELD%CMNHNAME))
   END IF
 END IF
 !
 ! UNITS
 !
-STATUS = NF90_INQUIRE_ATTRIBUTE(KNCID, KVARID, 'units', LEN=ILEN)
+STATUS = NF90_INQUIRE_ATTRIBUTE(INCID, KVARID, 'units', LEN=ILEN)
 IF (STATUS == NF90_NOERR) THEN
   ALLOCATE(CHARACTER(LEN=ILEN) :: YVALUE)
-  STATUS = NF90_GET_ATT(KNCID, KVARID, 'units', YVALUE)
+  STATUS = NF90_GET_ATT(INCID, KVARID, 'units', YVALUE)
   IF (TRIM(YVALUE)/=TRIM(TPFIELD%CUNITS)) THEN
     IF(.NOT.PRESENT(HCALENDAR)) THEN
-      CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_CHECK_FIELD_ATTR_NC4','expected UNITS ('//TRIM(TPFIELD%CUNITS)// &
-                     ') is different than found ('//TRIM(YVALUE)//')in file for field '//TRIM(TPFIELD%CMNHNAME))
+      CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+                     ': expected UNITS ('//TRIM(TPFIELD%CUNITS)//                           &
+                     ') is different than found ('//TRIM(YVALUE)//') in file for field '//TRIM(TPFIELD%CMNHNAME))
       KRESP = -111 !Used later to broadcast modified metadata
     ELSE
-      CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4','UNITS found in file for field ' &
-                                                                     //TRIM(TPFIELD%CMNHNAME)//' (will be analysed later)')
+      CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+                     ': UNITS found in file for field '//TRIM(TPFIELD%CMNHNAME)//' (will be analysed later)')
     END IF
     TPFIELD%CUNITS=TRIM(YVALUE)
   ELSE
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4','expected UNITS    found in file for field ' &
-                                                                   //TRIM(TPFIELD%CMNHNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+                   ': expected UNITS    found in file for field '//TRIM(TPFIELD%CMNHNAME))
   END IF
   DEALLOCATE(YVALUE)
 ELSE !no UNITS
   IF (LEN_TRIM(TPFIELD%CUNITS)==0) THEN
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4','no UNITS (as expected) in file for field ' &
-                                                                   //TRIM(TPFIELD%CMNHNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+                   ': no UNITS (as expected) in file for field '//TRIM(TPFIELD%CMNHNAME))
   ELSE
     IF(.NOT.PRESENT(HCALENDAR)) THEN
-      CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_CHECK_FIELD_ATTR_NC4','expected UNITS but not found in file for field ' &
-                                                                       //TRIM(TPFIELD%CMNHNAME))
+      CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+                     ': expected UNITS but not found in file for field '//TRIM(TPFIELD%CMNHNAME))
     ELSE
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_CHECK_FIELD_ATTR_NC4','expected UNITS but not found in file for field ' &
-                                                                     //TRIM(TPFIELD%CMNHNAME))
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+                     ': expected UNITS but not found in file for field '//TRIM(TPFIELD%CMNHNAME))
       KRESP = -3
     END IF
   END IF
@@ -2154,21 +2161,22 @@ END IF
 ! CALENDAR
 !
 IF(PRESENT(HCALENDAR)) THEN
-STATUS = NF90_INQUIRE_ATTRIBUTE(KNCID, KVARID, 'calendar', LEN=ILEN)
+STATUS = NF90_INQUIRE_ATTRIBUTE(INCID, KVARID, 'calendar', LEN=ILEN)
 IF (STATUS == NF90_NOERR) THEN
   ALLOCATE(CHARACTER(LEN=ILEN) :: YVALUE)
-  STATUS = NF90_GET_ATT(KNCID, KVARID, 'calendar', YVALUE)
+  STATUS = NF90_GET_ATT(INCID, KVARID, 'calendar', YVALUE)
   IF (TRIM(YVALUE)/=TRIM(HCALENDAR)) THEN
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_CHECK_FIELD_ATTR_NC4','expected CALENDAR ('//TRIM(HCALENDAR)// &
-                   ') is different than found ('//TRIM(YVALUE)//')in file for field '//TRIM(TPFIELD%CMNHNAME))
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+                   ': expected CALENDAR ('//TRIM(HCALENDAR)//                             &
+                   ') is different than found ('//TRIM(YVALUE)//') in file for field '//TRIM(TPFIELD%CMNHNAME))
   ELSE
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4','expected CALENDAR found in file for field ' &
-                                                                   //TRIM(TPFIELD%CMNHNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+                   ': expected CALENDAR found in file for field '//TRIM(TPFIELD%CMNHNAME))
   END IF
   DEALLOCATE(YVALUE)
 ELSE !no CALENDAR
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_CHECK_FIELD_ATTR_NC4','expected CALENDAR but not found in file for field ' &
-                                                                   //TRIM(TPFIELD%CMNHNAME))
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+                 ': expected CALENDAR but not found in file for field '//TRIM(TPFIELD%CMNHNAME))
 END IF
 ENDIF
 !
@@ -2214,7 +2222,7 @@ IF (IDIMS == 0 .AND. ITYPE == NF90_DOUBLE) THEN
     GOTO 1000
   END IF
   ! Read and check attributes of variable
-  CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFIELD,INCID,IVARID,IRESP)
+  CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
 ELSE
   CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_X0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                          ' not read (wrong size or type)')
@@ -2273,7 +2281,7 @@ IF (IDIMS == 1 .AND. ITYPE == NF90_DOUBLE) THEN
       GOTO 1000
     END IF
     ! Read and check attributes of variable
-    CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFIELD,INCID,IVARID,IRESP)
+    CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
   ELSE
     CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_X1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                            ' not read (wrong size)')
@@ -2352,7 +2360,7 @@ IF (IDIMS == 2 .AND. ITYPE == NF90_DOUBLE) THEN
       GOTO 1000
     END IF
     ! Read and check attributes of variable
-    CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFIELD,INCID,IVARID,IRESP)
+    CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
   ELSE
     CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_X2',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                            ' not read (wrong size)')
@@ -2420,7 +2428,7 @@ IF (IDIMS == 3 .AND. ITYPE == NF90_DOUBLE) THEN
       GOTO 1000
     END IF
     ! Read and check attributes of variable
-    CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFIELD,INCID,IVARID,IRESP)
+    CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
   ELSE
     CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_X3',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                            ' not read (wrong size)')
@@ -2491,7 +2499,7 @@ IF (IDIMS == 4 .AND. ITYPE == NF90_DOUBLE) THEN
       GOTO 1000
     END IF
     ! Read and check attributes of variable
-    CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFIELD,INCID,IVARID,IRESP)
+    CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
   ELSE
     CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_X4',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                            ' not read (wrong size)')
@@ -2565,7 +2573,7 @@ IF (IDIMS == 5 .AND. ITYPE == NF90_DOUBLE) THEN
       GOTO 1000
     END IF
     ! Read and check attributes of variable
-    CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFIELD,INCID,IVARID,IRESP)
+    CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
   ELSE
     CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_X5',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                            ' not read (wrong size)')
@@ -2641,7 +2649,7 @@ IF (IDIMS == 6 .AND. ITYPE == NF90_DOUBLE) THEN
       GOTO 1000
     END IF
     ! Read and check attributes of variable
-    CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFIELD,INCID,IVARID,IRESP)
+    CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
   ELSE
     CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_X6',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                            ' not read (wrong size)')
@@ -2703,7 +2711,7 @@ IF (IDIMS == 0 .AND. (ITYPE == NF90_INT64 .OR. ITYPE == NF90_INT) ) THEN
       GOTO 1000
    END IF
    ! Read and check attributes of variable
-   CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFIELD,INCID,IVARID,IRESP)
+   CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
 ELSE
    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_N0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                           ' not read (wrong size or type)')
@@ -2767,7 +2775,7 @@ IF (IDIMS == 1 .AND. (ITYPE == NF90_INT64 .OR. ITYPE == NF90_INT1) ) THEN
       GOTO 1000
     END IF
     ! Read and check attributes of variable
-    CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFIELD,INCID,IVARID,IRESP)
+    CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
   ELSE
     CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_N1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                            ' not read (wrong size)')
@@ -2851,7 +2859,7 @@ IF (IDIMS == SIZE(SHAPE(KFIELD)) .AND. (ITYPE == NF90_INT64 .OR. ITYPE == NF90_I
       GOTO 1000
     END IF
     ! Read and check attributes of variable
-    CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFIELD,INCID,IVARID,IRESP)
+    CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
   ELSE
     CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_N2',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                            ' not read (wrong size)')
@@ -2922,7 +2930,7 @@ IF (IDIMS == 0 .AND. (ITYPE == NF90_INT1 .OR. ITYPE == NF90_INT .OR. ITYPE == NF
   END IF
 
   ! Read and check attributes of variable
-  CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFIELD,INCID,IVARID,IRESP)
+  CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
 ELSE
   CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_L0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                          ' not read (wrong size or type)')
@@ -3001,7 +3009,7 @@ IF (IDIMS == 1 .AND. (ITYPE == NF90_INT1 .OR. ITYPE == NF90_INT .OR. ITYPE == NF
     END IF
 
     ! Read and check attributes of variable
-    CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFIELD,INCID,IVARID,IRESP)
+    CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
   ELSE
     CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_L1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                            ' not read (wrong size)')
@@ -3071,7 +3079,7 @@ IF (IDIMS == 1 .AND. (ITYPE == NF90_CHAR) ) THEN
    DEALLOCATE(YSTR)
 
    ! Read and check attributes of variable
-   CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFIELD,INCID,IVARID,IRESP)
+   CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
 ELSE
    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_C0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                           ' not read (wrong size or type)')
@@ -3127,7 +3135,7 @@ IF (IDIMS == 0 .AND. ITYPE == NF90_DOUBLE) THEN
     GOTO 1000
   END IF
   ! Read and check attributes of variable
-  CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFIELD,INCID,IVARID,IRESP,HCALENDAR='standard')
+  CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP,HCALENDAR='standard')
   ! Extract date from UNITS
   IDX =  INDEX(TPFIELD%CUNITS,'since ')
   READ(TPFIELD%CUNITS(IDX+6 :IDX+9), '( I4.4 )') TPDATA%TDATE%YEAR