diff --git a/src/LIB/SURCOUCHE/src/mode_io_field_write.f90 b/src/LIB/SURCOUCHE/src/mode_io_field_write.f90
index e2a158c3d2a159944abbca4d0a3545b54b0d4de4..21d4f3e9559f681f923be26eb60b0df2b635237f 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_field_write.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_field_write.f90
@@ -3929,7 +3929,8 @@ end subroutine IO_Ndimlist_reduce
   END SUBROUTINE IO_Field_write_box_byfield_X3
 
 
-  SUBROUTINE IO_Field_write_box_byfield_X4( TPFILE, TPFIELD, HBUDGET, PFIELD, KXOBOX, KXEBOX, KYOBOX, KYEBOX, KRESP, koffset )
+  SUBROUTINE IO_Field_write_box_byfield_X4( TPFILE, TPFIELD, HBUDGET, PFIELD, KXOBOX, KXEBOX, KYOBOX, KYEBOX, &
+                                            KZOBOX, KZEBOX, KRESP, koffset )
     !
     USE MODD_IO, ONLY: GSMONOPROC, ISP
     !
@@ -3946,12 +3947,15 @@ end subroutine IO_Ndimlist_reduce
     INTEGER,                            INTENT(IN)  :: KXEBOX   ! Global coordinates of the box
     INTEGER,                            INTENT(IN)  :: KYOBOX   !
     INTEGER,                            INTENT(IN)  :: KYEBOX   !
+    INTEGER,                  OPTIONAL, INTENT(IN)  :: KZOBOX   !
+    INTEGER,                  OPTIONAL, INTENT(IN)  :: KZEBOX   !
     INTEGER,                  OPTIONAL, INTENT(OUT) :: KRESP    ! return-code
     integer, dimension(4),    optional, intent(in)  :: koffset
     !
     !*      0.2   Declarations of local variables
     !
     integer                             :: iresp, iresp_lfi, iresp_nc4, iresp_glob
+    INTEGER                             :: IZOBOX, IZEBOX
     REAL, DIMENSION(:,:,:,:), POINTER   :: ZFIELDP
     LOGICAL                             :: GALLOC
     LOGICAL                             :: GLFI, GNC4
@@ -3976,10 +3980,22 @@ end subroutine IO_Ndimlist_reduce
     end if
 
     IF (IRESP==0) THEN
+      IF ( PRESENT( KZOBOX ) ) THEN
+        IZOBOX = KZOBOX
+      ELSE
+        IZOBOX = LBOUND( PFIELD, 3 )
+      END IF
+
+      IF ( PRESENT( KZEBOX ) ) THEN
+        IZEBOX = KZEBOX
+      ELSE
+        IZEBOX = UBOUND( PFIELD, 3 )
+      END IF
+
        IF (GSMONOPROC) THEN ! sequential execution
           IF (HBUDGET /= 'BUDGET') THEN
              ! take the sub-section of PFIELD defined by the box
-             ZFIELDP=>PFIELD(KXOBOX:KXEBOX,KYOBOX:KYEBOX,:,:)
+             ZFIELDP=>PFIELD(KXOBOX:KXEBOX,KYOBOX:KYEBOX,IZOBOX:IZEBOX,:)
           ELSE
              ! take the field as a budget
              ZFIELDP=>PFIELD
@@ -3994,14 +4010,14 @@ end subroutine IO_Ndimlist_reduce
        ELSE ! multiprocesses execution
           IF (ISP == TPFILE%NMASTER_RANK)  THEN
              ! Allocate the box
-             ALLOCATE(ZFIELDP(KXEBOX-KXOBOX+1,KYEBOX-KYOBOX+1,SIZE(PFIELD,3),SIZE(PFIELD,4)))
+             ALLOCATE( ZFIELDP(KXEBOX-KXOBOX+1, KYEBOX-KYOBOX+1, IZEBOX-IZOBOX+1, SIZE(PFIELD,4)) )
              GALLOC = .TRUE.
           ELSE
              ALLOCATE(ZFIELDP(0,0,0,0))
              GALLOC = .TRUE.
           END IF
           !
-          CALL GATHER_XYFIELD(PFIELD,ZFIELDP,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM,&
+          CALL GATHER_XYFIELD(PFIELD(:,:,IZOBOX:IZEBOX,:),ZFIELDP,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM,&
                & KXOBOX,KXEBOX,KYOBOX,KYEBOX,HBUDGET)
           !
           IF (ISP == TPFILE%NMASTER_RANK)  THEN