diff --git a/src/LIB/SURCOUCHE/src/fmreadwrit.f90 b/src/LIB/SURCOUCHE/src/fmreadwrit.f90
index 8c8976f740f969c736367f2855d84426f3d4813f..559073125266aedff0a830ff751078db5f0e0899 100644
--- a/src/LIB/SURCOUCHE/src/fmreadwrit.f90
+++ b/src/LIB/SURCOUCHE/src/fmreadwrit.f90
@@ -263,7 +263,8 @@ IMPLICIT NONE
 PRIVATE
 !
 INTERFACE IO_WRITE_FIELD_LFI
-   MODULE PROCEDURE IO_WRITE_FIELD_LFI_X2,IO_WRITE_FIELD_LFI_X3, &
+   MODULE PROCEDURE IO_WRITE_FIELD_LFI_X0,                       &
+                    IO_WRITE_FIELD_LFI_X2,IO_WRITE_FIELD_LFI_X3, &
                     IO_WRITE_FIELD_LFI_N0, &
                     IO_WRITE_FIELD_LFI_C0
 END INTERFACE IO_WRITE_FIELD_LFI
@@ -272,6 +273,38 @@ PUBLIC IO_WRITE_FIELD_LFI
 !
 CONTAINS
 !
+SUBROUTINE IO_WRITE_FIELD_LFI_X0(TPFIELD,KFLU,PFIELD,KRESP)
+!
+IMPLICIT NONE
+!
+!*      0.1   Declarations of arguments
+!
+TYPE(TFIELDDATA),      INTENT(IN) :: TPFIELD
+INTEGER,               INTENT(IN) :: KFLU   ! Fortran Logical Unit
+REAL,                  INTENT(IN) :: PFIELD ! array containing the data field
+INTEGER,               INTENT(OUT):: KRESP  ! return-code if problems araised
+!
+!*      0.2   Declarations of local variables
+!
+INTEGER                                  :: ILENG
+INTEGER(KIND=LFI_INT)                    :: IRESP, ITOTAL
+INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
+!
+ILENG = 1
+!
+CALL WRITE_PREPARE(TPFIELD,ILENG,IWORK,ITOTAL,IRESP)
+!
+IF (IRESP==0) THEN
+  CALL TRANSFW(IWORK(LEN_TRIM(TPFIELD%CCOMMENT)+3),PFIELD,ILENG)
+  CALL LFIECR(IRESP,KFLU,TRIM(TPFIELD%CMNHNAME),IWORK,ITOTAL)
+ENDIF
+!
+KRESP=IRESP
+!
+IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
+!
+END SUBROUTINE IO_WRITE_FIELD_LFI_X0
+!
 SUBROUTINE IO_WRITE_FIELD_LFI_X2(TPFIELD,KFLU,PFIELD,KRESP,KVERTLEVEL)
 !
 IMPLICIT NONE
diff --git a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90
index da8e13754df116692fb27a2c74d0b5a3ae926817..263f74c4e3a173374739a7100c23abbabf5ca42e 100644
--- a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90
+++ b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90
@@ -179,10 +179,12 @@ MODULE MODE_FMWRIT
   PRIVATE
 
   INTERFACE IO_WRITE_FIELD
-     MODULE PROCEDURE IO_WRITE_FIELD_BYNAME_X2, IO_WRITE_FIELD_BYNAME_X3,  &
+     MODULE PROCEDURE IO_WRITE_FIELD_BYNAME_X0,                            &
+                      IO_WRITE_FIELD_BYNAME_X2, IO_WRITE_FIELD_BYNAME_X3,  &
                       IO_WRITE_FIELD_BYNAME_N0,                            &
                       IO_WRITE_FIELD_BYNAME_L0,                            &
                       IO_WRITE_FIELD_BYNAME_C0,                            &
+                      IO_WRITE_FIELD_BYFIELD_X0,                           &
                       IO_WRITE_FIELD_BYFIELD_X2,IO_WRITE_FIELD_BYFIELD_X3, &
                       IO_WRITE_FIELD_BYFIELD_N0,                           &
                       IO_WRITE_FIELD_BYFIELD_L0,                           &
@@ -332,6 +334,112 @@ CONTAINS
     KRESP = IRESP
   END SUBROUTINE FMWRITX0_ll
 
+  SUBROUTINE IO_WRITE_FIELD_BYNAME_X0(TPFILE,HNAME,HFIPRI,KRESP,PFIELD)
+    !
+    USE MODD_IO_ll, ONLY : TFILEDATA
+    !
+    !*      0.1   Declarations of arguments
+    !
+    TYPE(TFILEDATA),           INTENT(IN) :: TPFILE
+    CHARACTER(LEN=*),          INTENT(IN) :: HNAME    ! name of the field to write
+    CHARACTER(LEN=*),          INTENT(IN) :: HFIPRI   ! output file for error messages
+    INTEGER,                   INTENT(OUT):: KRESP    ! return-code 
+    REAL,                      INTENT(IN) :: PFIELD   ! array containing the data field
+    !
+    !*      0.2   Declarations of local variables
+    !
+    INTEGER :: ID ! Index of the field
+    !
+    CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,KRESP)
+    !
+    IF(KRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),HFIPRI,KRESP,PFIELD)
+    !
+  END SUBROUTINE IO_WRITE_FIELD_BYNAME_X0
+
+  SUBROUTINE IO_WRITE_FIELD_BYFIELD_X0(TPFILE,TPFIELD,HFIPRI,KRESP,PFIELD)
+    USE MODD_IO_ll
+    USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL
+    USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME
+    !
+    IMPLICIT NONE
+    !
+    !*      0.1   Declarations of arguments
+    !
+    TYPE(TFILEDATA),             INTENT(IN) :: TPFILE
+    TYPE(TFIELDDATA),            INTENT(IN) :: TPFIELD
+    CHARACTER(LEN=*),            INTENT(IN) :: HFIPRI   ! output file for error messages
+    INTEGER,                     INTENT(OUT):: KRESP    ! return-code 
+    REAL,TARGET,                 INTENT(IN) :: PFIELD   ! array containing the data field
+    !
+    !*      0.2   Declarations of local variables
+    !
+    CHARACTER(LEN=28)                        :: YFILEM   ! FM-file name
+    CHARACTER(LEN=NMNHNAMELGTMAX)            :: YRECFM   ! name of the article to write
+    CHARACTER(LEN=2)                         :: YDIR     ! field form
+    CHARACTER(LEN=JPFINL)                    :: YFNLFI
+    INTEGER                                  :: IERR
+    TYPE(FD_ll), POINTER                     :: TZFD
+    INTEGER                                  :: IRESP
+    !
+    INTEGER                                  :: IK_FILE,IK_RANK
+    CHARACTER(len=5)                         :: YK_FILE  
+    CHARACTER(len=128)                       :: YFILE_IOZ  
+    TYPE(FD_ll), POINTER                     :: TZFD_IOZ 
+    TYPE(TFILEDATA),POINTER                  :: TZFILE
+    !
+    YFILEM   = TPFILE%CNAME
+    YRECFM   = TPFIELD%CMNHNAME
+    YDIR     = TPFIELD%CDIR
+    !
+    !
+    !*      1.1   THE NAME OF LFIFM
+    !
+    IRESP = 0
+    YFNLFI=TRIM(ADJUSTL(YFILEM))//'.lfi'
+    !------------------------------------------------------------------
+    TZFD=>GETFD(YFNLFI)
+    IF (ASSOCIATED(TZFD)) THEN
+       IF (GSMONOPROC) THEN ! sequential execution
+          IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,PFIELD,IRESP)
+          IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,PFIELD,IRESP)
+       ELSE ! multiprocessor execution
+          IF (ISP == TZFD%OWNER)  THEN
+             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,PFIELD,IRESP)
+             IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,PFIELD,IRESP)
+          END IF
+          !
+          CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR)
+       END IF ! multiprocessor execution
+       IF (TZFD%nb_procio.gt.1) THEN
+          ! write the data in all Z files
+          DO IK_FILE=1,TZFD%nb_procio
+             write(YK_FILE ,'(".Z",i3.3)')  IK_FILE
+             YFILE_IOZ =  TRIM(YFILEM)//YK_FILE//".lfi"
+             TZFD_IOZ => GETFD(YFILE_IOZ)   
+             IK_RANK = TZFD_IOZ%OWNER
+             IF ( ISP == IK_RANK )  THEN
+                IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD_IOZ%FLU,PFIELD,IRESP)
+                IF (LIOCDF4) THEN
+                  CALL IO_FILE_FIND_BYNAME(TRIM(TPFILE%CNAME)//YK_FILE,TZFILE,IRESP)
+                  IF (IRESP/=0) THEN
+                    PRINT *,'FATAL: IO_WRITE_FIELD_BYFIELD_X0: file ',TRIM(TRIM(TPFILE%CNAME)//YK_FILE),' not found in list'
+                    STOP
+                  END IF
+                  CALL IO_WRITE_FIELD_NC4(TZFILE,TPFIELD,TZFD_IOZ%CDF,PFIELD,IRESP)
+                END IF
+             END IF
+          END DO
+       ENDIF
+    ELSE
+       IRESP = -61
+    END IF
+    !----------------------------------------------------------------
+    IF (IRESP.NE.0) THEN
+       CALL FM_WRIT_ERR("IO_WRITE_FIELD_BYFIELD_X0",YFILEM,HFIPRI,YRECFM,YDIR,TPFIELD%NGRID,LEN(TPFIELD%CCOMMENT),IRESP)
+    END IF
+    KRESP = IRESP
+  END SUBROUTINE IO_WRITE_FIELD_BYFIELD_X0
+
   SUBROUTINE FMWRITX1_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,&
        KLENCH,HCOMMENT,KRESP)
     USE MODD_IO_ll, ONLY : ISP,GSMONOPROC,LIOCDF4,LLFIOUT
diff --git a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 b/src/LIB/SURCOUCHE/src/mode_netcdf.f90
index d38186aa84daecda17fbc92f34d358d610e5d2d0..72b21af17624dccd2d9528e627655d99a87931eb 100644
--- a/src/LIB/SURCOUCHE/src/mode_netcdf.f90
+++ b/src/LIB/SURCOUCHE/src/mode_netcdf.f90
@@ -22,7 +22,8 @@ INTEGER(KIND=IDCDF_KIND),PARAMETER :: SHUFFLE = 1 !Set to 1 for (usually) better
 INTEGER(KIND=IDCDF_KIND),PARAMETER :: DEFLATE = 1
 
 INTERFACE IO_WRITE_FIELD_NC4
-   MODULE PROCEDURE IO_WRITE_FIELD_NC4_X2,IO_WRITE_FIELD_NC4_X3, &
+   MODULE PROCEDURE IO_WRITE_FIELD_NC4_X0,                       &
+                    IO_WRITE_FIELD_NC4_X2,IO_WRITE_FIELD_NC4_X3, &
                     IO_WRITE_FIELD_NC4_N0, &
                     IO_WRITE_FIELD_NC4_C0
 END INTERFACE IO_WRITE_FIELD_NC4
@@ -451,6 +452,49 @@ IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITX0[NF90_PUT_VAR
 KRESP = IRESP
 END SUBROUTINE NCWRITX0
 
+SUBROUTINE IO_WRITE_FIELD_NC4_X0(TPFILE,TPFIELD,PZCDF,PFIELD,KRESP)
+!
+USE MODD_FM, ONLY : FMHEADER
+USE MODD_PARAMETERS_ll,  ONLY : JPVEXT
+!
+TYPE(TFILEDATA),       INTENT(IN) :: TPFILE
+TYPE(TFIELDDATA),      INTENT(IN) :: TPFIELD
+TYPE(IOCDF), POINTER              :: PZCDF
+REAL,                  INTENT(IN) :: PFIELD
+INTEGER,               INTENT(OUT):: KRESP
+!
+INTEGER(KIND=IDCDF_KIND) :: STATUS
+INTEGER(KIND=IDCDF_KIND) :: INCID
+CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME
+INTEGER(KIND=IDCDF_KIND) :: IVARID
+INTEGER                  :: IRESP
+!
+IRESP = 0
+! Get the Netcdf file ID
+INCID = TPFILE%NNCID
+
+! NetCDF var names can't contain '%' nor '.' 
+YVARNAME = str_replace(TPFIELD%CMNHNAME, '%', '__')
+YVARNAME = str_replace(YVARNAME, '.', '--')
+
+! The variable should not already exist but who knows ?
+STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
+IF (STATUS /= NF90_NOERR) THEN
+   ! Define the scalar variable 
+   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]')
+   CALL IO_WRITE_FIELD_ATTR_NC4(TPFIELD,INCID,IVARID)
+ELSE
+   PRINT *,'IO_WRITE_FIELD_NC4_X0: ', TRIM(YVARNAME), ' already defined !'
+END IF
+
+! 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)
+ 
+KRESP = IRESP
+END SUBROUTINE IO_WRITE_FIELD_NC4_X0
+
 SUBROUTINE NCWRITX1(PZCDF, HVARNAME, HDIR, PFIELD, TPFMH, KRESP)
 USE MODD_FM, ONLY : FMHEADER
 TYPE(IOCDF), POINTER             :: PZCDF