diff --git a/src/LIB/SURCOUCHE/src/mode_io_field_write.f90 b/src/LIB/SURCOUCHE/src/mode_io_field_write.f90
index 73d73fb8a988b5dbd313ee70c29c1d1c32ff3c64..e7e7ed37a715c408f46a4c5d9d49d8396965b316 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_field_write.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_field_write.f90
@@ -3961,17 +3961,15 @@ END SUBROUTINE IO_Fieldlist_write
 
 SUBROUTINE IO_Fieldlist_1field_write( TPOUTPUT, KMI, TPFIELD, TPBOX )
 
-USE MODD_BAKOUT,     ONLY: LOUT_PHYSICAL_SIMPLIFIED
-USE MODD_DIM_n,      ONLY: NIMAX_ll, NJMAX_ll, NKMAX
 USE MODD_FIELD,      ONLY: TFIELDDATA, TFIELDMETADATA
 USE MODD_OUT_n,      ONLY: CMAINDOMAINNAME, TOUTBOXMETADATA
-USE MODD_PARAMETERS, ONLY: JPHEXT, JPVEXT
 
 TYPE(TFILEDATA),                 INTENT(IN) :: TPOUTPUT !Output file
 INTEGER,                         INTENT(IN) :: KMI
 TYPE(TFIELDDATA),                INTENT(IN) :: TPFIELD
 TYPE(TOUTBOXMETADATA), OPTIONAL, INTENT(IN) :: TPBOX
 
+INTEGER              :: IIINF, IJINF, IKINF
 INTEGER              :: IISUP, IJSUP, IKSUP
 TYPE(TFIELDMETADATA) :: TZFIELDMD
 
@@ -4263,28 +4261,12 @@ NDIMS: SELECT CASE (TPFIELD%NDIMS)
             ! Modify ndimlist except for main domain
             IF ( TPBOX%CNAME /= CMAINDOMAINNAME ) CALL IO_Dim_main_to_box(TZFIELDMD )
 
-            IF ( TPBOX%CNAME == CMAINDOMAINNAME .AND. TZFIELDMD%NGRID == 2 .AND. .NOT.LOUT_PHYSICAL_SIMPLIFIED ) THEN
-              ! There is one more PHYSICAL horizontal layer for u points (but the same number for physical + unphysical borders)
-              IISUP = MIN( JPHEXT + TPBOX%NISUP + 1, NIMAX_ll + 2*JPHEXT )
-            ELSE
-              IISUP = JPHEXT + TPBOX%NISUP
-            END IF
-            IF ( TPBOX%CNAME == CMAINDOMAINNAME .AND. TZFIELDMD%NGRID == 3 .AND. .NOT.LOUT_PHYSICAL_SIMPLIFIED ) THEN
-              ! There is one more PHYSICAL horizontal layer for v points (but the same number for physical + unphysical borders)
-              IJSUP = MIN( JPHEXT + TPBOX%NJSUP + 1, NJMAX_ll + 2*JPHEXT )
-            ELSE
-              IJSUP = JPHEXT + TPBOX%NJSUP
-            END IF
-            IF ( TPBOX%CNAME == CMAINDOMAINNAME .AND. TZFIELDMD%NGRID == 4 .AND. .NOT.LOUT_PHYSICAL_SIMPLIFIED ) THEN
-              ! There is one more PHYSICAL vertical layer for w points (but the same number for physical + unphysical borders)
-              IKSUP = MIN( JPVEXT + TPBOX%NKSUP + 1, NKMAX + 2*JPVEXT )
-            ELSE
-              IKSUP = JPVEXT + TPBOX%NKSUP
-            END IF
+            CALL IO_Dim_box_bounds( TPBOX, TZFIELDMD, KIINF=IIINF, KISUP=IISUP, KJINF=IJINF, KJSUP=IJSUP, KKINF=IKINF, KKSUP=IKSUP )
+
             CALL IO_Field_write_BOX( TPOUTPUT, TZFIELDMD, 'OTHER', TPFIELD%TFIELD_X3D(KMI)%DATA, &
-                                     KXOBOX = JPHEXT + TPBOX%NIINF, KXEBOX = IISUP,              &
-                                     KYOBOX = JPHEXT + TPBOX%NJINF, KYEBOX = IJSUP,              &
-                                     KZOBOX = JPVEXT + TPBOX%NKINF, KZEBOX = IKSUP               )
+                                     KXOBOX = IIINF, KXEBOX = IISUP,                             &
+                                     KYOBOX = IJINF, KYEBOX = IJSUP,                             &
+                                     KZOBOX = IKINF, KZEBOX = IKSUP                              )
           END IF
         ELSE
           call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_1field_write', trim(tpfield%cmnhname)// &
@@ -4491,6 +4473,63 @@ SUBROUTINE IO_Dim_main_to_box( TPFIELD )
 END SUBROUTINE IO_Dim_main_to_box
 
 
+SUBROUTINE IO_Dim_box_bounds( TPBOX, TPFIELD, KIINF, KISUP, KJINF, KJSUP, KKINF, KKSUP )
+  ! Subroutine to return the box boundaries in global coordinates
+  USE MODD_BAKOUT,     ONLY: LOUT_PHYSICAL_SIMPLIFIED
+  USE MODD_DIM_n,      ONLY: NIMAX_ll, NJMAX_ll, NKMAX
+  USE MODD_FIELD,      ONLY: TFIELDMETADATA
+  USE MODD_OUT_n,      ONLY: CMAINDOMAINNAME, TOUTBOXMETADATA
+  USE MODD_PARAMETERS, ONLY: JPHEXT, JPVEXT
+
+  TYPE(TOUTBOXMETADATA),           INTENT(IN)  :: TPBOX
+  CLASS(TFIELDMETADATA),           INTENT(IN)  :: TPFIELD
+  INTEGER,               OPTIONAL, INTENT(OUT) :: KIINF
+  INTEGER,               OPTIONAL, INTENT(OUT) :: KISUP
+  INTEGER,               OPTIONAL, INTENT(OUT) :: KJINF
+  INTEGER,               OPTIONAL, INTENT(OUT) :: KJSUP
+  INTEGER,               OPTIONAL, INTENT(OUT) :: KKINF
+  INTEGER,               OPTIONAL, INTENT(OUT) :: KKSUP
+
+  IF ( TPFIELD%CDIR == 'XY' ) THEN
+    IF ( .NOT.PRESENT(KIINF) .OR. .NOT.PRESENT(KISUP) .OR. .NOT.PRESENT(KJINF) .OR. .NOT.PRESENT(KJSUP) ) &
+      call Print_msg( NVERB_FATAL, 'IO', 'IO_Dim_box_bounds', trim(tpfield%cmnhname) // ': missing needed dummy arguments' )
+
+    KIINF = JPHEXT + TPBOX%NIINF
+    IF ( TPBOX%CNAME == CMAINDOMAINNAME .AND. TPFIELD%NGRID == 2 .AND. .NOT.LOUT_PHYSICAL_SIMPLIFIED ) THEN
+      ! There is one more PHYSICAL horizontal layer for u points (but the same number for physical + unphysical borders)
+      KISUP = MIN( JPHEXT + TPBOX%NISUP + 1, NIMAX_ll + 2*JPHEXT )
+    ELSE
+      KISUP = JPHEXT + TPBOX%NISUP
+    END IF
+
+    KJINF = JPHEXT + TPBOX%NJINF
+    IF ( TPBOX%CNAME == CMAINDOMAINNAME .AND. TPFIELD%NGRID == 3 .AND. .NOT.LOUT_PHYSICAL_SIMPLIFIED ) THEN
+      ! There is one more PHYSICAL horizontal layer for v points (but the same number for physical + unphysical borders)
+      KJSUP = MIN( JPHEXT + TPBOX%NJSUP + 1, NJMAX_ll + 2*JPHEXT )
+    ELSE
+      KJSUP = JPHEXT + TPBOX%NJSUP
+    END IF
+
+    IF ( TPFIELD%NDIMS > 2 ) THEN
+      IF ( .NOT.PRESENT(KKINF) .OR. .NOT.PRESENT(KKSUP) ) &
+        call Print_msg( NVERB_FATAL, 'IO', 'IO_Dim_box_bounds', trim(tpfield%cmnhname) // ': missing needed dummy arguments' )
+
+      KKINF = JPVEXT + TPBOX%NKINF
+      IF ( TPBOX%CNAME == CMAINDOMAINNAME .AND. TPFIELD%NGRID == 4 .AND. .NOT.LOUT_PHYSICAL_SIMPLIFIED ) THEN
+        ! There is one more PHYSICAL vertical layer for w points (but the same number for physical + unphysical borders)
+        KKSUP = MIN( JPVEXT + TPBOX%NKSUP + 1, NKMAX + 2*JPVEXT )
+      ELSE
+        KKSUP = JPVEXT + TPBOX%NKSUP
+      END IF
+    END IF
+  ELSE
+    call Print_msg( NVERB_FATAL, 'IO', 'IO_Dim_box_bounds', &
+                    trim(tpfield%cmnhname) // ': unsupported CDIR (' // trim(tpfield%cdir) // ')' )
+  END IF
+
+END SUBROUTINE IO_Dim_box_bounds
+
+
 SUBROUTINE IO_Field_user_write( TPOUTPUT )
 !
 #if 0