diff --git a/src/LIB/SURCOUCHE/src/mode_io_field_write.f90 b/src/LIB/SURCOUCHE/src/mode_io_field_write.f90
index 36f8e778d50dd0106d0a68737a151f66ba0d942a..1387fef42fba629b1b789ccc6e4aebad9aa2806e 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_field_write.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_field_write.f90
@@ -5310,25 +5310,56 @@ END SUBROUTINE IO_Field_box_user_intern_write
 
 
 SUBROUTINE IO_Field_user_write( TPOUTPUT )
-!
 #if 0
 ! IMPORTANT: uncomment the previous line (set to '#if 1') if you want to use the next lines
+! IMPORTANT: these are examples and some fields could not exist in your simulation => crash is possible in this case
+! IMPORTANT: adapt this subroutine to what you want to write, do not keep everything that is present here
+!             if it has no meaning/use for you
+USE MODD_CONF_n,     ONLY: NRR
 USE MODD_DYN_n,      ONLY: XTSTEP
 USE MODD_FIELD_n,    ONLY: XUT, XVT, XRT, XTHT, XSVT
+USE MODD_NSV,        ONLY: NSV
+USE MODD_OUT_n,      ONLY: LOUT_BIGBOX_WRITE, NOUT_NBOXES
 USE MODD_PARAMETERS, ONLY: JPVEXT
 USE MODD_PRECIP_n,   ONLY: XINPRR
+
+! This block is for the SURFEX-field example
+USE MODD_IO_SURF_MNH,  ONLY: NHALO, NIU, NJU, NIB, NJB, NIE, NJE
+USE MODD_MNH_SURFEX_n, ONLY: YSURF_CUR
+USE MODD_SURF_PAR,     ONLY: XUNDEF_SFX => XUNDEF
 #endif
-!
+
 IMPLICIT NONE
-!
+
 TYPE(TFILEDATA), INTENT(IN) :: TPOUTPUT !Output structure
-!
-TYPE(TFIELDMETADATA) :: TZFIELD
-!
+
 #if 0
 ! IMPORTANT: uncomment the previous line (set to '#if 1') if you want to use the next lines
+LOGICAL, DIMENSION(:), ALLOCATABLE :: LBOX_WRITE
+TYPE(TFIELDMETADATA)               :: TZFIELD
+
+
+INTEGER                              :: IKB
+REAL,    DIMENSION(:,:), ALLOCATABLE :: ZWORK ! work array written in the file
+
+! LBOX_WRITE provides the list of boxes (subdomains) to write (TRUE=>write the box, FALSE=>do not write it)
+!
+! The entry at position 0 is for the main domain
+! Entry 0 is set to true by default if there are no boxes / subdomains (NOUT_BOXES=0 (which is the default value)
+! in namelist NAM_OUTPUT)
+! or if LOUT_MAINDOMAIN_WRITE=T (also in namelist NAM_OUTPUT)
 !
-INTEGER          :: IKB
+! If there are boxes, by default, all the user fields present in this subroutine will be written in all the boxes
+! If you do not want this behaviour (ie you do not want to write your fields in all boxes, you have to modify LBOX_WRITE)
+! otherwise, do not change the following block
+ALLOCATE( LBOX_WRITE(0:NOUT_NBOXES) )
+LBOX_WRITE(:) = .TRUE.
+IF ( .NOT. LOUT_BIGBOX_WRITE ) LBOX_WRITE(0) = .FALSE.
+! Example: if you do not want to write your field in the box number 2, uncomment the following line
+! (remark, for this to work, you need at least 2 boxes!)
+! LBOX_WRITE(2) = .FALSE.
+! It is also possible to adapt this for different fields and therefore write different fields in different boxes
+
 
 IKB=JPVEXT+1
 
@@ -5343,7 +5374,7 @@ TZFIELD = TFIELDMETADATA( &
   NTYPE      = TYPEREAL,  &
   NDIMS      = 2,         &
   LTIMEDEP   = .TRUE.     )
-CALL IO_Field_write( TPOUTPUT, TZFIELD, XUT(:,:,IKB) )
+CALL IO_Field_box_user_write( TPOUTPUT, TZFIELD, LBOX_WRITE(:), XUT(:,:,IKB) )
 
 TZFIELD = TFIELDMETADATA( &
   CMNHNAME   = 'VTLOW',   &
@@ -5356,7 +5387,7 @@ TZFIELD = TFIELDMETADATA( &
   NTYPE      = TYPEREAL,  &
   NDIMS      = 2,         &
   LTIMEDEP   = .TRUE.     )
-CALL IO_Field_write( TPOUTPUT, TZFIELD, XVT(:,:,IKB) )
+CALL IO_Field_box_user_write( TPOUTPUT, TZFIELD, LBOX_WRITE(:), XVT(:,:,IKB) )
 
 TZFIELD = TFIELDMETADATA( &
   CMNHNAME   = 'THTLOW',  &
@@ -5369,8 +5400,9 @@ TZFIELD = TFIELDMETADATA( &
   NTYPE      = TYPEREAL,  &
   NDIMS      = 2,         &
   LTIMEDEP   = .TRUE.     )
-CALL IO_Field_write( TPOUTPUT, TZFIELD, XTHT(:,:,IKB) )
+CALL IO_Field_box_user_write( TPOUTPUT, TZFIELD, LBOX_WRITE(:), XTHT(:,:,IKB) )
 
+IF ( NRR > 0 ) THEN
 TZFIELD = TFIELDMETADATA(           &
   CMNHNAME   = 'RVTLOW',            &
   CLONGNAME  = '',                  &
@@ -5383,8 +5415,10 @@ TZFIELD = TFIELDMETADATA(           &
   NTYPE      = TYPEREAL,            &
   NDIMS      = 2,                   &
   LTIMEDEP   = .TRUE.               )
-CALL IO_Field_write( TPOUTPUT, TZFIELD, XRT(:,:,IKB,1) )
+CALL IO_Field_box_user_write( TPOUTPUT, TZFIELD, LBOX_WRITE(:), XRT(:,:,IKB,1) )
+END IF
 
+IF ( SIZE( XINPRR ) > 0 ) THEN
 TZFIELD = TFIELDMETADATA(         &
   CMNHNAME   = 'ACPRRSTEP',       &
   CLONGNAME  = '',                &
@@ -5397,8 +5431,10 @@ TZFIELD = TFIELDMETADATA(         &
   NDIMS      = 2,                 &
   LTIMEDEP   = .TRUE.             )
 !XACPRR is multiplied by 1000. to convert from m to kg m-2 (water density is assumed to be 1000 kg m-3)
-CALL IO_Field_write( TPOUTPUT, TZFIELD, XINPRR*XTSTEP*1.0E3 )
+CALL IO_Field_box_user_write( TPOUTPUT, TZFIELD, LBOX_WRITE(:), XINPRR*XTSTEP*1.0E3 )
+END IF
 
+IF ( NSV > 0 ) THEN
 TZFIELD = TFIELDMETADATA( &
   CMNHNAME   = 'SVT001',  &
   CLONGNAME  = 'SVT001',  &
@@ -5410,7 +5446,29 @@ TZFIELD = TFIELDMETADATA( &
   NTYPE      = TYPEREAL,  &
   NDIMS      = 3,         &
   LTIMEDEP   = .TRUE.     )
-CALL IO_Field_write( TPOUTPUT, TZFIELD, XSVT(:,:,:,1) )
+CALL IO_Field_box_user_write( TPOUTPUT, TZFIELD, LBOX_WRITE(:), XSVT(:,:,:,1) )
+END IF
+
+! Example of a field from SURFEX that needs to be converted to the right dimensions before writing
+ALLOCATE( ZWORK(NIU,NJU) )
+
+ZWORK(:,:) = XUNDEF_SFX
+ZWORK(NIB:NIE+2*NHALO,NJB:NJE+2*NHALO) = RESHAPE( YSURF_CUR%DU%XT2M(:), [ NIE+2*NHALO-NIB+1,NJE+2*NHALO-NJB+1 ] )
+
+TZFIELD = TFIELDMETADATA( &
+  CMNHNAME   = 'T2M',   &
+  CLONGNAME  = 'Near surface Air Temperature',        &
+  CSTDNAME   = '',  &
+  CUNITS     = 'K',   &
+  CDIR       = 'XY',      &
+  CCOMMENT   = 'X_Y_air temperature at 2m', &
+  NGRID      = 1,         &
+  NTYPE      = TYPEREAL,  &
+  NDIMS      = 2,         &
+  LTIMEDEP   = .TRUE.     )
+CALL IO_Field_box_user_write( TPOUTPUT, TZFIELD, LBOX_WRITE(:), ZWORK )
+
+DEALLOCATE( ZWORK )
 #endif
 
 END SUBROUTINE IO_Field_user_write