diff --git a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 b/src/LIB/SURCOUCHE/src/mode_netcdf.f90
index 15224d2a3d1296e89e80f007ba7b958410ea91d3..3c90ffc773b093f763c4916300b642b7917b93b3 100644
--- a/src/LIB/SURCOUCHE/src/mode_netcdf.f90
+++ b/src/LIB/SURCOUCHE/src/mode_netcdf.f90
@@ -532,7 +532,7 @@ END IF
 END SUBROUTINE IO_WRITE_HEADER_NC4
 
 
-SUBROUTINE IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,KVARID,KSHAPE,HCALENDAR,OISCOORD)
+SUBROUTINE IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,KVARID,OEXISTED,KSHAPE,HCALENDAR,OISCOORD)
 !
 USE MODD_CONF,   ONLY: CPROGRAM, LCARTESIAN
 USE MODD_CONF_n, ONLY: CSTORAGE_TYPE
@@ -542,6 +542,7 @@ USE MODE_FIELD,  ONLY: TYPEINT, TYPEREAL
 TYPE(TFILEDATA),                               INTENT(IN) :: TPFILE
 TYPE(TFIELDDATA),                              INTENT(IN) :: TPFIELD
 INTEGER(KIND=IDCDF_KIND),                      INTENT(IN) :: KVARID
+LOGICAL,                                       INTENT(IN) :: OEXISTED !True if variable was already defined
 INTEGER(KIND=IDCDF_KIND),DIMENSION(:),OPTIONAL,INTENT(IN) :: KSHAPE
 CHARACTER(LEN=*),                     OPTIONAL,INTENT(IN) :: HCALENDAR
 LOGICAL,                              OPTIONAL,INTENT(IN) :: OISCOORD   ! Is a coordinate variable (->do not write coordinates attribute)
@@ -668,10 +669,13 @@ IF(TPFIELD%NTYPE==TYPEINT .AND. TPFIELD%NDIMS>0) THEN
                                                                 'interval for variable '//TRIM(TPFIELD%CMNHNAME))
   !
   ! Fillvalue (CF/COMODO convention)
-  !Remark: the attribute '_FillValue' is also recognized by the netCDF library
-  !        and is used when pre-filling a variable
-  STATUS = NF90_PUT_ATT(INCID, KVARID,'_FillValue', TPFIELD%NFILLVALUE)
-  IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_ATTR_NC4 [NF90_PUT_ATT]')
+  ! Remarks: * the attribute '_FillValue' is also recognized by the netCDF library
+  !            and is used when pre-filling a variable
+  !          * it cannot be modified if some data has already been written (->check OEXISTED)
+  IF(.NOT.OEXISTED) THEN
+    STATUS = NF90_PUT_ATT(INCID, KVARID,'_FillValue', TPFIELD%NFILLVALUE)
+    IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_ATTR_NC4 [NF90_PUT_ATT]')
+  END IF
   !
   ! Valid_min/max (CF/COMODO convention)
   STATUS = NF90_PUT_ATT(INCID, KVARID,'valid_min', TPFIELD%NVALIDMIN)
@@ -687,14 +691,17 @@ IF(TPFIELD%NTYPE==TYPEREAL .AND. TPFIELD%NDIMS>0) THEN
                                                                 'interval for variable '//TRIM(TPFIELD%CMNHNAME))
   !
   ! Fillvalue (CF/COMODO convention)
-  !Remark: the attribute '_FillValue' is also recognized by the netCDF library
-  !        and is used when pre-filling a variable
-  IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN
-    STATUS = NF90_PUT_ATT(INCID, KVARID,'_FillValue', REAL(TPFIELD%XFILLVALUE,KIND=4))
-  ELSE
-    STATUS = NF90_PUT_ATT(INCID, KVARID,'_FillValue', TPFIELD%XFILLVALUE)
+  ! Remarks: * the attribute '_FillValue' is also recognized by the netCDF library
+  !            and is used when pre-filling a variable
+  !          * it cannot be modified if some data has already been written (->check OEXISTED)
+  IF(.NOT.OEXISTED) THEN
+    IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN
+      STATUS = NF90_PUT_ATT(INCID, KVARID,'_FillValue', REAL(TPFIELD%XFILLVALUE,KIND=4))
+    ELSE
+      STATUS = NF90_PUT_ATT(INCID, KVARID,'_FillValue', TPFIELD%XFILLVALUE)
+    END IF
+    IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_ATTR_NC4 [NF90_PUT_ATT]')
   END IF
-  IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_ATTR_NC4 [NF90_PUT_ATT]')
   !
   ! Valid_min/max (CF/COMODO convention)
   IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN
@@ -911,13 +918,16 @@ INTEGER(KIND=IDCDF_KIND) :: INCID
 CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME
 INTEGER(KIND=IDCDF_KIND) :: IVARID
 INTEGER                  :: IRESP
+LOGICAL                  :: GEXISTED !True if variable was already defined
 !
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_X0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
-
+!
+GEXISTED = .FALSE.
+!
 CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
 
 ! The variable should not already exist but who knows ?
@@ -927,11 +937,12 @@ IF (STATUS /= NF90_NOERR) THEN
    STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVARID)
    IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X0[NF90_DEF_VAR]')
 ELSE
+   GEXISTED = .TRUE.
    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID)
+CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED)
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD)
 IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X0[NF90_PUT_VAR] '//TRIM(TPFIELD%CMNHNAME),IRESP)
@@ -953,13 +964,16 @@ CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)+4) :: YVARNAME
 INTEGER(KIND=IDCDF_KIND) :: IVARID
 INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS
 INTEGER                  :: IRESP
+LOGICAL                  :: GEXISTED !True if variable was already defined
 !
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_X1',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
-
+!
+GEXISTED = .FALSE.
+!
 CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
 
 ! The variable should not already exist but who knows ?
@@ -987,11 +1001,12 @@ IF (STATUS /= NF90_NOERR) THEN
      IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X1[NF90_DEF_VAR_DEFLATE]')
    END IF
 ELSE
+   GEXISTED = .TRUE.
    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID)
+CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED)
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD)
 IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X1[NF90_PUT_VAR] '//TRIM(TPFIELD%CMNHNAME),IRESP)
@@ -1019,6 +1034,7 @@ INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS
 INTEGER                  :: IRESP
 LOGICAL                  :: GSPLIT
 TYPE(TFILEDATA),POINTER  :: TZFILE
+LOGICAL                  :: GEXISTED !True if variable was already defined
 !
 IRESP = 0
 GSPLIT = .FALSE.
@@ -1042,7 +1058,9 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_X2',TRIM(TPFILE%CNAME)//': w
 !
 ! Get the Netcdf file ID
 INCID = TZFILE%NNCID
-
+!
+GEXISTED = .FALSE.
+!
 CALL CLEANMNHNAME(YTMP,YVARNAME)
 
 ! The variable should not already exist but who knows ?
@@ -1070,11 +1088,12 @@ IF (STATUS /= NF90_NOERR) THEN
      IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X2[NF90_DEF_VAR_DEFLATE]')
    END IF
 ELSE
+   GEXISTED = .TRUE.
    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X2',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND),OISCOORD=OISCOORD)
+CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND),OISCOORD=OISCOORD)
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD)
 IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X2[NF90_PUT_VAR] '//TRIM(TPFIELD%CMNHNAME),IRESP)
@@ -1096,6 +1115,7 @@ CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME
 INTEGER(KIND=IDCDF_KIND) :: IVARID
 INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS
 INTEGER                  :: IRESP
+LOGICAL                  :: GEXISTED !True if variable was already defined
 !
 !
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_X3',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
@@ -1103,7 +1123,9 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_X3',TRIM(TPFILE%CNAME)//': w
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
-
+!
+GEXISTED = .FALSE.
+!
 CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
 
 ! The variable should not already exist but who knows ?
@@ -1131,11 +1153,12 @@ IF (STATUS /= NF90_NOERR) THEN
    END IF
    IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X3[NF90_DEF_VAR]')
 ELSE
+   GEXISTED = .TRUE.
    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X3',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND))
+CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND))
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD)
 IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X3[NF90_PUT_VAR] '//TRIM(TPFIELD%CMNHNAME),IRESP)
@@ -1157,6 +1180,7 @@ CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME
 INTEGER(KIND=IDCDF_KIND) :: IVARID
 INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS
 INTEGER                  :: IRESP
+LOGICAL                  :: GEXISTED !True if variable was already defined
 !
 !
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_X4',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
@@ -1164,7 +1188,9 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_X4',TRIM(TPFILE%CNAME)//': w
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
-
+!
+GEXISTED = .FALSE.
+!
 CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
 
 ! The variable should not already exist but who knows ?
@@ -1192,11 +1218,12 @@ IF (STATUS /= NF90_NOERR) THEN
    END IF
    IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X4[NF90_DEF_VAR]')
 ELSE
+   GEXISTED = .TRUE.
    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X4',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND))
+CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND))
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD)
 IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X4[NF90_PUT_VAR] '//TRIM(TPFIELD%CMNHNAME),IRESP)
@@ -1218,6 +1245,7 @@ CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME
 INTEGER(KIND=IDCDF_KIND) :: IVARID
 INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS
 INTEGER                  :: IRESP
+LOGICAL                  :: GEXISTED !True if variable was already defined
 !
 !
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_X5',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
@@ -1225,7 +1253,9 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_X5',TRIM(TPFILE%CNAME)//': w
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
-
+!
+GEXISTED = .FALSE.
+!
 CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
 
 ! The variable should not already exist but who knows ?
@@ -1253,11 +1283,12 @@ IF (STATUS /= NF90_NOERR) THEN
    END IF
    IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X5[NF90_DEF_VAR]')
 ELSE
+   GEXISTED = .TRUE.
    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X5',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND))
+CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND))
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD)
 IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X5[NF90_PUT_VAR] '//TRIM(TPFIELD%CMNHNAME),IRESP)
@@ -1279,6 +1310,7 @@ CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME
 INTEGER(KIND=IDCDF_KIND) :: IVARID
 INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS
 INTEGER                  :: IRESP
+LOGICAL                  :: GEXISTED !True if variable was already defined
 !
 !
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_X6',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
@@ -1286,7 +1318,9 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_X6',TRIM(TPFILE%CNAME)//': w
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
-
+!
+GEXISTED = .FALSE.
+!
 CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
 
 ! The variable should not already exist but who knows ?
@@ -1314,11 +1348,12 @@ IF (STATUS /= NF90_NOERR) THEN
    END IF
    IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X6[NF90_DEF_VAR]')
 ELSE
+   GEXISTED = .TRUE.
    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X6',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND))
+CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND))
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD)
 IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X6[NF90_PUT_VAR] '//TRIM(TPFIELD%CMNHNAME),IRESP)
@@ -1345,13 +1380,16 @@ INTEGER(KIND=IDCDF_KIND) :: INCID
 CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME
 INTEGER(KIND=IDCDF_KIND) :: IVARID
 INTEGER                  :: IRESP
+LOGICAL                  :: GEXISTED !True if variable was already defined
 !
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_N0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
-
+!
+GEXISTED = .FALSE.
+!
 CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
 
 ! The variable should not already exist but who knows ?
@@ -1365,11 +1403,12 @@ IF (STATUS /= NF90_NOERR) THEN
 #endif
    IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_N0[NF90_DEF_VAR]')
 ELSE
+   GEXISTED = .TRUE.
    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_N0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID)
+CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED)
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, KFIELD)
 IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_N0[NF90_PUT_VAR] '//TRIM(TPFIELD%CMNHNAME),IRESP)
@@ -1414,13 +1453,16 @@ CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME
 INTEGER(KIND=IDCDF_KIND) :: IVARID
 INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(KFIELD))) :: IVDIMS
 INTEGER                  :: IRESP
+LOGICAL                  :: GEXISTED !True if variable was already defined
 !
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_N1',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
-
+!
+GEXISTED = .FALSE.
+!
 CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
 
 ! The variable should not already exist but who knows ?
@@ -1443,11 +1485,12 @@ IF (STATUS /= NF90_NOERR) THEN
 #endif
    IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_N1[NF90_DEF_VAR]')
 ELSE
+   GEXISTED = .TRUE.
    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_N1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID)
+CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED)
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, KFIELD)
 IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_N1[NF90_PUT_VAR] '//TRIM(TPFIELD%CMNHNAME),IRESP)
@@ -1469,6 +1512,7 @@ CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME
 INTEGER(KIND=IDCDF_KIND) :: IVARID
 INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(KFIELD))) :: IVDIMS
 INTEGER                  :: IRESP
+LOGICAL                  :: GEXISTED !True if variable was already defined
 !
 IRESP = 0
 !
@@ -1476,7 +1520,9 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_N2',TRIM(TPFILE%CNAME)//': w
 !
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
-
+!
+GEXISTED = .FALSE.
+!
 CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
 
 ! The variable should not already exist but who knows ?
@@ -1504,11 +1550,12 @@ IF (STATUS /= NF90_NOERR) THEN
      IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_N2[NF90_DEF_VAR_DEFLATE]')
    END IF
 ELSE
+   GEXISTED = .TRUE.
    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_N2',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,KSHAPE=INT(SHAPE(KFIELD),KIND=IDCDF_KIND))
+CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(KFIELD),KIND=IDCDF_KIND))
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, KFIELD)
 IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_N2[NF90_PUT_VAR] '//TRIM(TPFIELD%CMNHNAME),IRESP)
@@ -1529,6 +1576,7 @@ CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME
 INTEGER(KIND=IDCDF_KIND) :: IVARID
 INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(KFIELD))) :: IVDIMS
 INTEGER                  :: IRESP
+LOGICAL                  :: GEXISTED !True if variable was already defined
 !
 IRESP = 0
 !
@@ -1536,7 +1584,9 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_N3',TRIM(TPFILE%CNAME)//': w
 !
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
-
+!
+GEXISTED = .FALSE.
+!
 CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
 
 ! The variable should not already exist but who knows ?
@@ -1564,11 +1614,12 @@ IF (STATUS /= NF90_NOERR) THEN
      IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_N3[NF90_DEF_VAR_DEFLATE]')
    END IF
 ELSE
+   GEXISTED = .TRUE.
    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_N3',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,KSHAPE=INT(SHAPE(KFIELD),KIND=IDCDF_KIND))
+CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(KFIELD),KIND=IDCDF_KIND))
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, KFIELD)
 IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_N3[NF90_PUT_VAR] '//TRIM(TPFIELD%CMNHNAME),IRESP)
@@ -1591,13 +1642,16 @@ INTEGER(KIND=IDCDF_KIND) :: INCID
 CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME
 INTEGER(KIND=IDCDF_KIND) :: IVARID
 INTEGER                  :: IRESP
+LOGICAL                  :: GEXISTED !True if variable was already defined
 !
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_L0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
-
+!
+GEXISTED = .FALSE.
+!
 CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
 
 ! The variable should not already exist but who knows ?
@@ -1608,6 +1662,7 @@ IF (STATUS /= NF90_NOERR) THEN
    STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT1, IVARID)
    IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_L0[NF90_DEF_VAR]')
 ELSE
+   GEXISTED = .TRUE.
    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_L0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
@@ -1619,7 +1674,7 @@ ELSE
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID)
+CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED)
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, IFIELD)
 IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_L0[NF90_PUT_VAR] '//TRIM(TPFIELD%CMNHNAME),IRESP)
@@ -1643,13 +1698,16 @@ CHARACTER(LEN=LEN(TPFIELD%CMNHNAME))                     :: YVARNAME
 INTEGER(KIND=IDCDF_KIND)                                 :: IVARID
 INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(OFIELD))) :: IVDIMS
 INTEGER                                                  :: IRESP
+LOGICAL                                                  :: GEXISTED !True if variable was already defined
 !
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_L1',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
-
+!
+GEXISTED = .FALSE.
+!
 CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
 
 ! The variable should not already exist but who knows ?
@@ -1669,6 +1727,7 @@ IF (STATUS /= NF90_NOERR) THEN
    STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT1, IVDIMS, IVARID)
    IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_L1[NF90_DEF_VAR]')
 ELSE
+   GEXISTED = .TRUE.
    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_L1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
@@ -1680,7 +1739,7 @@ ELSEWHERE
 END WHERE
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID)
+CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED)
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, IFIELD)
 IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_L1[NF90_PUT_VAR] '//TRIM(TPFIELD%CMNHNAME),IRESP)
@@ -1705,6 +1764,7 @@ INTEGER(KIND=IDCDF_KIND)               :: IVARID
 INTEGER(KIND=IDCDF_KIND), DIMENSION(1) :: IVDIMS
 INTEGER                                :: IRESP, ILEN
 CHARACTER(LEN=:),ALLOCATABLE           :: YFIELD
+LOGICAL                                :: GEXISTED !True if variable was already defined
 !
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_C0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
@@ -1718,7 +1778,9 @@ IF (ILEN==0) ILEN = IMULT
 
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
-
+!
+GEXISTED = .FALSE.
+!
 CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
 
 ! The variable should not already exist but who knows ?
@@ -1730,6 +1792,7 @@ IF (STATUS /= NF90_NOERR) THEN
    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]')
 ELSE
+   GEXISTED = .TRUE.
    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_C0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
@@ -1737,7 +1800,7 @@ ALLOCATE(CHARACTER(LEN=ILEN)::YFIELD)
 YFIELD(:)=TRIM(HFIELD) !Warning: keep (:) to prevent F2003 automatic reallocation
 YFIELD(LEN_TRIM(HFIELD)+1:)=' '
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID)
+CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED)
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, YFIELD)
 IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_C0[NF90_PUT_VAR] '//TRIM(TPFIELD%CMNHNAME),IRESP)
@@ -1762,6 +1825,7 @@ INTEGER(KIND=IDCDF_KIND)               :: IVARID
 INTEGER(KIND=IDCDF_KIND), DIMENSION(2) :: IVDIMS
 INTEGER(KIND=IDCDF_KIND)               :: ILEN, ISIZE
 INTEGER                                :: IRESP
+LOGICAL                                :: GEXISTED !True if variable was already defined
 !
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_C1',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
@@ -1772,7 +1836,9 @@ ISIZE = SIZE(HFIELD)
 
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
-
+!
+GEXISTED = .FALSE.
+!
 CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
 
 ! The variable should not already exist but who knows ?
@@ -1785,11 +1851,12 @@ IF (STATUS /= NF90_NOERR) THEN
    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]')
 ELSE
+   GEXISTED = .TRUE.
    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_C1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID)
+CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED)
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, HFIELD(1:ISIZE)(1:ILEN), START=(/IONE,IONE/), COUNT=(/ILEN,ISIZE/))
 IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_C1[NF90_PUT_VAR] '//TRIM(TPFIELD%CMNHNAME),IRESP)
@@ -1816,6 +1883,7 @@ INTEGER                                :: IRESP
 INTEGER, DIMENSION(3)                  :: ITDATE    ! date array
 TYPE(TFIELDDATA)                       :: TZFIELD
 CHARACTER(LEN=40)                      :: YUNITS
+LOGICAL                                :: GEXISTED !True if variable was already defined
 !
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_T0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
@@ -1830,6 +1898,8 @@ ITDATE(3)=TPDATA%TDATE%DAY
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
 !
+GEXISTED = .FALSE.
+!
 CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
 !
 TZFIELD%CMNHNAME = TRIM(YVARNAME)
@@ -1843,11 +1913,12 @@ IF (STATUS /= NF90_NOERR) THEN
    STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVARID)
    IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_T0[NF90_DEF_VAR]')
 ELSE
+   GEXISTED = .TRUE.
    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_T0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TZFIELD,IVARID,HCALENDAR='standard')
+CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TZFIELD,IVARID,GEXISTED,HCALENDAR='standard')
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, TPDATA%TIME)
 IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X0[NF90_PUT_VAR] '//TRIM(TPFIELD%CMNHNAME),IRESP)
@@ -1877,7 +1948,7 @@ IF (STATUS /= NF90_NOERR) THEN
    ! Define the variable 
    STATUS = NF90_DEF_VAR(INCID, TZFIELD%CMNHNAME, NF90_INT, IVDIMS, IVARID)
    IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_T0[NF90_DEF_VAR]')
-   CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TZFIELD,IVARID)
+   CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TZFIELD,IVARID,GEXISTED)
 ELSE
    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_T0',TRIM(TPFILE%CNAME)//': '//TRIM(TZFIELD%CMNHNAME)//' already defined')
 END IF
@@ -1904,8 +1975,9 @@ IF (STATUS /= NF90_NOERR) THEN
    ! Define the scalar variable 
    STATUS = NF90_DEF_VAR(INCID, TZFIELD%CMNHNAME, NF90_DOUBLE, IVARID)
    IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_T0[NF90_DEF_VAR]')
-   CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TZFIELD,IVARID)
+   CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TZFIELD,IVARID,GEXISTED)
 ELSE
+   GEXISTED = .TRUE.
    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_T0',TRIM(TPFILE%CNAME)//': '//TRIM(TZFIELD%CMNHNAME)//' already defined')
 END IF