diff --git a/src/LIB/SURCOUCHE/src/mode_io_field_write.f90 b/src/LIB/SURCOUCHE/src/mode_io_field_write.f90
index 428a047c3cc00c103fa35a0dd4c4ddacec2ac663..5fbf05ff9beda56445561d49ce63057e14eb11b2 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_field_write.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_field_write.f90
@@ -4384,22 +4384,16 @@ SUBROUTINE IO_Fieldlist_1field_write( TPOUTPUT, KMI, TPFIELD, TPBOX )
 USE MODD_FIELD,      ONLY: TFIELDDATA, TFIELDMETADATA
 USE MODD_OUT_n,      ONLY: CMAINDOMAINNAME, TOUTBOXMETADATA
 
-TYPE(TFILEDATA),                 INTENT(IN) :: TPOUTPUT !Output file
-INTEGER,                         INTENT(IN) :: KMI
-TYPE(TFIELDDATA),                INTENT(IN) :: TPFIELD
-TYPE(TOUTBOXMETADATA), OPTIONAL, INTENT(IN) :: TPBOX
+TYPE(TFILEDATA),       INTENT(IN) :: TPOUTPUT !Output file
+INTEGER,               INTENT(IN) :: KMI
+TYPE(TFIELDDATA),      INTENT(IN) :: TPFIELD
+TYPE(TOUTBOXMETADATA), INTENT(IN) :: TPBOX
 
 INTEGER              :: IIINF, IJINF, IKINF
 INTEGER              :: IISUP, IJSUP, IKSUP
 TYPE(TFIELDMETADATA) :: TZFIELDMD
 
-IF ( PRESENT(TPBOX) ) THEN
-  IF ( TPBOX%CNAME /= CMAINDOMAINNAME .AND. TPFIELD%NDIMS /= 3 .AND. TPFIELD%NTYPE /= TYPEREAL ) THEN
-    CALL Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_1field_write', 'TPBOX optional dummy argument not allowed for field ' &
-                    // TRIM(TPFIELD%CMNHNAME) )
-    RETURN
-  END IF
-END IF
+TZFIELDMD = TFIELDMETADATA( TPFIELD ) !Copy only metadata (TZFIELDMD is of TYPE(TFIELDMETADATA))
 
 NDIMS: SELECT CASE (TPFIELD%NDIMS)
   !
@@ -4508,6 +4502,33 @@ NDIMS: SELECT CASE (TPFIELD%NDIMS)
   !1D output
   !
   CASE (1)
+    CDIR1D: SELECT CASE ( TPFIELD%CDIR )
+      CASE ( 'XX' )
+        ! Modify ndimlist except for main domain
+        IF ( TPBOX%CNAME /= CMAINDOMAINNAME ) CALL IO_Dim_main_to_box( TZFIELDMD )
+
+        CALL IO_Dim_box_bounds( TPBOX, TZFIELDMD, KIINF=IIINF, KISUP=IISUP )
+
+      CASE ( 'YY' )
+        ! Modify ndimlist except for main domain
+        IF ( TPBOX%CNAME /= CMAINDOMAINNAME ) CALL IO_Dim_main_to_box( TZFIELDMD )
+
+        ! Use IINF/IISUP for KJINF/KJSUP dummy arguments because if 'YY', there is only 1 dim (Y-direction)
+        ! Compute the Y-bounds (KJINF/KJSUP) and store them in the 1st dimension (IINF/IISUP)
+        CALL IO_Dim_box_bounds( TPBOX, TZFIELDMD, KJINF=IIINF, KJSUP=IISUP )
+
+      CASE ( 'ZZ' )
+        ! Modify ndimlist except for main domain
+        IF ( TPBOX%CNAME /= CMAINDOMAINNAME ) CALL IO_Dim_main_to_box( TZFIELDMD )
+
+        ! Use IINF/IISUP for KKINF/KKSUP dummy arguments because if 'ZZ', there is only 1 dim (Z-direction)
+        ! Compute the Z-bounds (KKINF/KKSUP) and store them in the 1st dimension (IINF/IISUP)
+        CALL IO_Dim_box_bounds( TPBOX, TZFIELDMD, KKINF=IIINF, KKSUP=IISUP )
+
+      CASE DEFAULT
+        !Nothing to do
+    END SELECT CDIR1D
+
     NTYPE1D: SELECT CASE (TPFIELD%NTYPE)
       !
       !1D real
@@ -4522,7 +4543,11 @@ NDIMS: SELECT CASE (TPFIELD%NDIMS)
                           ': TFIELD_X1D%DATA is NOT associated' )
         END IF
         IF ( TPFIELD%CLBTYPE == 'NONE' ) THEN
-          CALL IO_Field_write(TPOUTPUT,TPFIELD,TPFIELD%TFIELD_X1D(KMI)%DATA)
+          IF ( TPFIELD%CDIR /= 'XX' .AND. TPFIELD%CDIR /= 'YY' .AND. TPFIELD%CDIR /= 'ZZ' ) THEN
+            CALL IO_Field_write(TPOUTPUT,TPFIELD,TPFIELD%TFIELD_X1D(KMI)%DATA)
+          ELSE
+            CALL IO_Field_write_BOX( TPOUTPUT, TZFIELDMD, 'OTHER', TPFIELD%TFIELD_X1D(KMI)%DATA, KXOBOX = IIINF, KXEBOX = IISUP )
+          END IF
         ELSE
           call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_1field_write', trim(tpfield%cmnhname)// &
                           ': CLBTYPE/=NONE not allowed for 1D real fields' )
@@ -4540,7 +4565,11 @@ NDIMS: SELECT CASE (TPFIELD%NDIMS)
                           ': TFIELD_N1D%DATA is NOT associated' )
         END IF
         IF ( TPFIELD%CLBTYPE == 'NONE' ) THEN
-          CALL IO_Field_write(TPOUTPUT,TPFIELD,TPFIELD%TFIELD_N1D(KMI)%DATA)
+          IF ( TPFIELD%CDIR /= 'XX' .AND. TPFIELD%CDIR /= 'YY' .AND. TPFIELD%CDIR /= 'ZZ' ) THEN
+            CALL IO_Field_write(TPOUTPUT,TPFIELD,TPFIELD%TFIELD_N1D(KMI)%DATA)
+          ELSE
+            CALL IO_Field_write_BOX( TPOUTPUT, TZFIELDMD, 'OTHER', TPFIELD%TFIELD_N1D(KMI)%DATA, KXOBOX = IIINF, KXEBOX = IISUP )
+          END IF
         ELSE
           call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_1field_write', trim(tpfield%cmnhname)// &
                           ': CLBTYPE/=NONE not allowed for 1D integer fields' )
@@ -4558,7 +4587,11 @@ NDIMS: SELECT CASE (TPFIELD%NDIMS)
                           ': TFIELD_L1D%DATA is NOT associated' )
         END IF
         IF ( TPFIELD%CLBTYPE == 'NONE' ) THEN
-          CALL IO_Field_write(TPOUTPUT,TPFIELD,TPFIELD%TFIELD_L1D(KMI)%DATA)
+          IF ( TPFIELD%CDIR /= 'XX' .AND. TPFIELD%CDIR /= 'YY' .AND. TPFIELD%CDIR /= 'ZZ' ) THEN
+            CALL IO_Field_write(TPOUTPUT,TPFIELD,TPFIELD%TFIELD_L1D(KMI)%DATA)
+          ELSE
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_1field_write', 'CDIR=XX, YY or ZZ not allowed for 1D logical fields' )
+          END IF
         ELSE
           call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_1field_write', trim(tpfield%cmnhname)// &
                           ': CLBTYPE/=NONE not allowed for 1D logical fields' )
@@ -4610,6 +4643,13 @@ NDIMS: SELECT CASE (TPFIELD%NDIMS)
   !2D output
   !
   CASE (2)
+    IF ( TZFIELDMD%CDIR == 'XY' ) THEN
+      ! Modify ndimlist except for main domain
+      IF ( TPBOX%CNAME /= CMAINDOMAINNAME ) CALL IO_Dim_main_to_box( TZFIELDMD )
+
+      CALL IO_Dim_box_bounds( TPBOX, TZFIELDMD, KIINF=IIINF, KISUP=IISUP, KJINF=IJINF, KJSUP=IJSUP )
+    END IF
+
     NTYPE2D: SELECT CASE (TPFIELD%NTYPE)
       !
       !2D real
@@ -4624,7 +4664,13 @@ NDIMS: SELECT CASE (TPFIELD%NDIMS)
                           ': TFIELD_X2D%DATA is NOT associated' )
         END IF
         IF ( TPFIELD%CLBTYPE == 'NONE' ) THEN
-          CALL IO_Field_write(TPOUTPUT,TPFIELD,TPFIELD%TFIELD_X2D(KMI)%DATA)
+          IF ( TZFIELDMD%CDIR /= 'XY' ) THEN
+            CALL IO_Field_write( TPOUTPUT, TPFIELD, TPFIELD%TFIELD_X2D(KMI)%DATA )
+          ELSE
+            CALL IO_Field_write_BOX( TPOUTPUT, TZFIELDMD, 'OTHER', TPFIELD%TFIELD_X2D(KMI)%DATA, &
+                                     KXOBOX = IIINF, KXEBOX = IISUP,                             &
+                                     KYOBOX = IJINF, KYEBOX = IJSUP                              )
+          END IF
         ELSE
           call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_1field_write', trim(tpfield%cmnhname)// &
                           ': CLBTYPE/=NONE not allowed for 2D real fields' )
@@ -4642,7 +4688,13 @@ NDIMS: SELECT CASE (TPFIELD%NDIMS)
                           ': TFIELD_N2D%DATA is NOT associated' )
         END IF
         IF ( TPFIELD%CLBTYPE == 'NONE' ) THEN
-          CALL IO_Field_write(TPOUTPUT,TPFIELD,TPFIELD%TFIELD_N2D(KMI)%DATA)
+          IF ( TZFIELDMD%CDIR /= 'XY' ) THEN
+            CALL IO_Field_write( TPOUTPUT, TPFIELD, TPFIELD%TFIELD_N2D(KMI)%DATA )
+          ELSE
+            CALL IO_Field_write_BOX( TPOUTPUT, TZFIELDMD, 'OTHER', TPFIELD%TFIELD_N2D(KMI)%DATA, &
+                                     KXOBOX = IIINF, KXEBOX = IISUP,                             &
+                                     KYOBOX = IJINF, KYEBOX = IJSUP                              )
+          END IF
         ELSE
           call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_1field_write', trim(tpfield%cmnhname)// &
                           ': CLBTYPE/=NONE not allowed for 2D integer fields' )
@@ -4658,6 +4710,13 @@ NDIMS: SELECT CASE (TPFIELD%NDIMS)
   !3D output
   !
   CASE (3)
+    IF ( TZFIELDMD%CDIR == 'XY' ) THEN
+      ! Modify ndimlist except for main domain
+      IF ( TPBOX%CNAME /= CMAINDOMAINNAME ) CALL IO_Dim_main_to_box( TZFIELDMD )
+
+      CALL IO_Dim_box_bounds( TPBOX, TZFIELDMD, KIINF=IIINF, KISUP=IISUP, KJINF=IJINF, KJSUP=IJSUP, KKINF=IKINF, KKSUP=IKSUP )
+    END IF
+
     NTYPE3D: SELECT CASE (TPFIELD%NTYPE)
       !
       !3D real
@@ -4672,17 +4731,9 @@ NDIMS: SELECT CASE (TPFIELD%NDIMS)
                           ': TFIELD_X3D%DATA is NOT associated' )
         END IF
         IF ( TPFIELD%CLBTYPE == 'NONE' ) THEN
-          IF ( .NOT.PRESENT( TPBOX ) ) THEN
-            CALL IO_Field_write(TPOUTPUT,TPFIELD,TPFIELD%TFIELD_X3D(KMI)%DATA)
+          IF ( TZFIELDMD%CDIR /= 'XY' ) THEN
+            CALL IO_Field_write( TPOUTPUT, TPFIELD, TPFIELD%TFIELD_X3D(KMI)%DATA )
           ELSE
-            TZFIELDMD = TFIELDMETADATA( TPFIELD ) !Copy only metadata (TZFIELD is of TYPE(TFIELDMETADATA))
-            IF ( TZFIELDMD%CDIR /= 'XY' ) &
-              CALL Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_1field_write', trim(tpfield%cmnhname)//': must have CDIR="XY"' )
-            ! Modify ndimlist except for main domain
-            IF ( TPBOX%CNAME /= CMAINDOMAINNAME ) CALL IO_Dim_main_to_box(TZFIELDMD )
-
-            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 = IIINF, KXEBOX = IISUP,                             &
                                      KYOBOX = IJINF, KYEBOX = IJSUP,                             &
@@ -4706,7 +4757,14 @@ NDIMS: SELECT CASE (TPFIELD%NDIMS)
                           ': TFIELD_N3D%DATA is NOT associated' )
         END IF
         IF ( TPFIELD%CLBTYPE == 'NONE' ) THEN
-          CALL IO_Field_write(TPOUTPUT,TPFIELD,TPFIELD%TFIELD_N3D(KMI)%DATA)
+          IF ( TZFIELDMD%CDIR /= 'XY' ) THEN
+            CALL IO_Field_write( TPOUTPUT, TPFIELD, TPFIELD%TFIELD_N3D(KMI)%DATA )
+          ELSE
+            CALL IO_Field_write_BOX( TPOUTPUT, TZFIELDMD, 'OTHER', TPFIELD%TFIELD_N3D(KMI)%DATA, &
+                                     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)// &
                           ': CLBTYPE/=NONE not (yet) allowed for 3D integer fields' )
@@ -4723,6 +4781,13 @@ NDIMS: SELECT CASE (TPFIELD%NDIMS)
   !4D output
   !
   CASE (4)
+    IF ( TZFIELDMD%CDIR == 'XY' ) THEN
+      ! Modify ndimlist except for main domain
+      IF ( TPBOX%CNAME /= CMAINDOMAINNAME ) CALL IO_Dim_main_to_box( TZFIELDMD )
+
+      CALL IO_Dim_box_bounds( TPBOX, TZFIELDMD, KIINF=IIINF, KISUP=IISUP, KJINF=IJINF, KJSUP=IJSUP, KKINF=IKINF, KKSUP=IKSUP )
+    END IF
+
     NTYPE4D: SELECT CASE (TPFIELD%NTYPE)
       !
       !4D real
@@ -4737,7 +4802,14 @@ NDIMS: SELECT CASE (TPFIELD%NDIMS)
                           ': TFIELD_X4D%DATA is NOT associated' )
         END IF
         IF ( TPFIELD%CLBTYPE == 'NONE' ) THEN
-          CALL IO_Field_write(TPOUTPUT,TPFIELD,TPFIELD%TFIELD_X4D(KMI)%DATA)
+          IF ( TZFIELDMD%CDIR /= 'XY' ) THEN
+            CALL IO_Field_write( TPOUTPUT, TPFIELD, TPFIELD%TFIELD_X4D(KMI)%DATA )
+          ELSE
+            CALL IO_Field_write_BOX( TPOUTPUT, TZFIELDMD, 'OTHER', TPFIELD%TFIELD_X4D(KMI)%DATA, &
+                                     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)// &
                           ': CLBTYPE/=NONE not (yet) allowed for 4D real fields' )
@@ -4768,7 +4840,11 @@ NDIMS: SELECT CASE (TPFIELD%NDIMS)
                           ': TFIELD_X5D%DATA is NOT associated' )
         END IF
         IF ( TPFIELD%CLBTYPE == 'NONE' ) THEN
-          CALL IO_Field_write(TPOUTPUT,TPFIELD,TPFIELD%TFIELD_X5D(KMI)%DATA)
+          IF ( TZFIELDMD%CDIR /= 'XY' ) THEN
+            CALL IO_Field_write( TPOUTPUT, TPFIELD, TPFIELD%TFIELD_X5D(KMI)%DATA )
+          ELSE
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_1field_write', '5D REAL not (yet) fully implemented' )
+          END IF
         ELSE
           call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_1field_write', trim(tpfield%cmnhname)// &
                           ': CLBTYPE/=NONE not (yet) allowed for 5D real fields' )
@@ -4799,7 +4875,11 @@ NDIMS: SELECT CASE (TPFIELD%NDIMS)
                           ': TFIELD_X6D%DATA is NOT associated' )
         END IF
         IF ( TPFIELD%CLBTYPE == 'NONE' ) THEN
-          CALL IO_Field_write(TPOUTPUT,TPFIELD,TPFIELD%TFIELD_X6D(KMI)%DATA)
+          IF ( TZFIELDMD%CDIR /= 'XY' ) THEN
+            CALL IO_Field_write( TPOUTPUT, TPFIELD, TPFIELD%TFIELD_X6D(KMI)%DATA )
+          ELSE
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_1field_write', '6D REAL not (yet) fully implemented' )
+          END IF
         ELSE
           call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_1field_write', trim(tpfield%cmnhname)// &
                           ': CLBTYPE/=NONE not (yet) allowed for 6D real fields' )
@@ -4833,7 +4913,73 @@ SUBROUTINE IO_Dim_main_to_box( TPFIELD )
 
   CLASS(TFIELDMETADATA), INTENT(INOUT) :: TPFIELD
 
-  IF ( TPFIELD%NDIMS >= 1 ) THEN
+  IF ( TPFIELD%NDIMS == 1 ) THEN
+    SELECT CASE ( TPFIELD%CDIR )
+      CASE ( 'XX' )
+        SELECT CASE ( TPFIELD%NGRID )
+          CASE( 1, 4 )
+            IF ( TPFIELD%NDIMLIST(1)/= NMNHDIM_NI )                                  &
+              CALL Print_msg( NVERB_ERROR, 'IO', 'IO_Dim_main_to_box',               &
+                              trim(tpfield%cmnhname) // ': unexpected 1st dimension' )
+            TPFIELD%NDIMLIST(1) = NMNHDIM_BOX_NI
+          CASE( 2 )
+            IF ( TPFIELD%NDIMLIST(1)/= NMNHDIM_NI_U )                                &
+              CALL Print_msg( NVERB_ERROR, 'IO', 'IO_Dim_main_to_box',               &
+                              trim(tpfield%cmnhname) // ': unexpected 1st dimension' )
+            TPFIELD%NDIMLIST(1) = NMNHDIM_BOX_NI_U
+          CASE( 3 )
+            IF ( TPFIELD%NDIMLIST(1)/= NMNHDIM_NI_V )                                &
+              CALL Print_msg( NVERB_ERROR, 'IO', 'IO_Dim_main_to_box',               &
+                              trim(tpfield%cmnhname) // ': unexpected 1st dimension' )
+            TPFIELD%NDIMLIST(1) = NMNHDIM_BOX_NI_V
+          CASE DEFAULT
+            CALL Print_msg( NVERB_ERROR, 'IO', 'IO_Dim_main_to_box', trim(tpfield%cmnhname)//': unsupported grid (XX)' )
+        END SELECT
+
+      CASE ( 'YY' )
+        SELECT CASE ( TPFIELD%NGRID )
+          CASE( 1, 4 )
+            IF ( TPFIELD%NDIMLIST(1)/= NMNHDIM_NJ )                                  &
+              CALL Print_msg( NVERB_ERROR, 'IO', 'IO_Dim_main_to_box',               &
+                              trim(tpfield%cmnhname) // ': unexpected 1st dimension' )
+            TPFIELD%NDIMLIST(1) = NMNHDIM_BOX_NJ
+          CASE( 2 )
+            IF ( TPFIELD%NDIMLIST(1)/= NMNHDIM_NJ_U )                                &
+              CALL Print_msg( NVERB_ERROR, 'IO', 'IO_Dim_main_to_box',               &
+                              trim(tpfield%cmnhname) // ': unexpected 1st dimension' )
+            TPFIELD%NDIMLIST(1) = NMNHDIM_BOX_NJ_U
+          CASE( 3 )
+            IF ( TPFIELD%NDIMLIST(1)/= NMNHDIM_NJ_V )                                &
+              CALL Print_msg( NVERB_ERROR, 'IO', 'IO_Dim_main_to_box',               &
+                              trim(tpfield%cmnhname) // ': unexpected 1st dimension' )
+            TPFIELD%NDIMLIST(1) = NMNHDIM_BOX_NJ_V
+          CASE DEFAULT
+            CALL Print_msg( NVERB_ERROR, 'IO', 'IO_Dim_main_to_box', trim(tpfield%cmnhname)//': unsupported grid (YY)' )
+        END SELECT
+
+      CASE ( 'ZZ' )
+        SELECT CASE ( TPFIELD%NGRID )
+          CASE( 1, 2, 3 )
+            IF ( TPFIELD%NDIMLIST(1)/= NMNHDIM_LEVEL )                               &
+              CALL Print_msg( NVERB_ERROR, 'IO', 'IO_Dim_main_to_box',               &
+                              trim(tpfield%cmnhname) // ': unexpected 1st dimension' )
+            TPFIELD%NDIMLIST(1) = NMNHDIM_BOX_LEVEL
+          CASE( 4 )
+            IF ( TPFIELD%NDIMLIST(1)/= NMNHDIM_LEVEL_W )                             &
+              CALL Print_msg( NVERB_ERROR, 'IO', 'IO_Dim_main_to_box',               &
+                              trim(tpfield%cmnhname) // ': unexpected 1st dimension' )
+            TPFIELD%NDIMLIST(1) = NMNHDIM_BOX_LEVEL_W
+          CASE DEFAULT
+            CALL Print_msg( NVERB_ERROR, 'IO', 'IO_Dim_main_to_box', trim(tpfield%cmnhname)//': unsupported grid (ZZ)' )
+      END SELECT
+
+      CASE DEFAULT
+        CALL Print_msg( NVERB_ERROR, 'IO', 'IO_Dim_main_to_box', &
+                        trim(tpfield%cmnhname) // ': unsupported CDIR (' // trim(TPFIELD%CDIR) // ')' )
+    END SELECT
+  END IF
+
+  IF ( TPFIELD%NDIMS > 1 ) THEN !Case where NDIMS==1 has already been treated
     SELECT CASE ( TPFIELD%NGRID )
       CASE( 1, 4 )
         IF ( TPFIELD%NDIMLIST(1)/= NMNHDIM_NI )                                  &
@@ -4910,27 +5056,65 @@ SUBROUTINE IO_Dim_box_bounds( TPBOX, TPFIELD, KIINF, KISUP, KJINF, KJSUP, KKINF,
   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' )
+  SELECT CASE ( TPFIELD%CDIR )
+    CASE ( 'XY' )
+      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
+      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
+      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
+
+    CASE ( 'XX' )
+      IF ( .NOT.PRESENT(KIINF) .OR. .NOT.PRESENT(KISUP) ) &
+        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
+
+    CASE ( 'YY' )
+      IF ( .NOT.PRESENT(KJINF) .OR. .NOT.PRESENT(KJSUP) ) &
+        call Print_msg( NVERB_FATAL, 'IO', 'IO_Dim_box_bounds', trim(tpfield%cmnhname) // ': missing needed dummy arguments' )
+
+      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 u 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
+    CASE ( 'ZZ' )
       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' )
 
@@ -4941,11 +5125,11 @@ SUBROUTINE IO_Dim_box_bounds( TPBOX, TPFIELD, KIINF, KISUP, KJINF, KJSUP, KKINF,
       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
+
+    CASE DEFAULT
+      call Print_msg( NVERB_FATAL, 'IO', 'IO_Dim_box_bounds', &
+                      trim(tpfield%cmnhname) // ': unsupported CDIR (' // trim(tpfield%cdir) // ')' )
+  END SELECT
 
 END SUBROUTINE IO_Dim_box_bounds