diff --git a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 b/src/LIB/SURCOUCHE/src/mode_netcdf.f90
index 4e12b6b4a8de2526b286301d1d20c9e696b9d1bf..9609697ee3d4b0f2a13a8e81205375c0f505c840 100644
--- a/src/LIB/SURCOUCHE/src/mode_netcdf.f90
+++ b/src/LIB/SURCOUCHE/src/mode_netcdf.f90
@@ -163,7 +163,8 @@ PIOCDF => TPFILE%TNCDIMS
 INCID = TPFILE%NNCID
 
 IF (TPFILE%LMASTER) THEN
-  IF (TRIM(CPROGRAM)/='PGD') THEN
+  IF ( TRIM(CPROGRAM)/='PGD' &
+      .AND. .NOT.(TRIM(CPROGRAM)=='REAL'.AND. .NOT.ASSOCIATED(XXHAT)) ) THEN !condition to detect PREP_SURFEX
     IIU = SIZE(XXHAT)
     IJU = SIZE(XYHAT)
     ALLOCATE(ZXHATM(IIU),ZYHATM(IJU))
@@ -193,7 +194,8 @@ IF (TPFILE%LMASTER) THEN
     CALL WRITE_HOR_COORD(PIOCDF%DIM_NJ_V,'y-dimension of the grid at v location','y_grid_index_at_v_location','Y',-0.5,JPHEXT)
   ENDIF
   !
-  IF (TRIM(CPROGRAM)/='PGD' .AND. TRIM(CPROGRAM)/='NESPGD') THEN
+  IF (TRIM(CPROGRAM)/='PGD' .AND. TRIM(CPROGRAM)/='NESPGD' &
+      .AND. .NOT.(TRIM(CPROGRAM)=='REAL'.AND. .NOT.ASSOCIATED(XXHAT)) ) THEN !condition to detect PREP_SURFEX
     IKU = SIZE(XZHAT)
     ALLOCATE(ZZHATM(IKU))
     ZZHATM(1:IKU-1) = 0.5 * (XZHAT(2:IKU)+XZHAT(1:IKU-1))
diff --git a/src/MNH/prep_surfex.f90 b/src/MNH/prep_surfex.f90
index e3ab44721b445a5f5153e14e2a8d135eb69ddb1a..f3200a838d3d7d8412c323d014e86eaa4eb32c60 100644
--- a/src/MNH/prep_surfex.f90
+++ b/src/MNH/prep_surfex.f90
@@ -40,7 +40,7 @@ USE MODD_CONF,        ONLY : CPROGRAM,NMASDEV,NBUGFIX,CBIBUSER,&
 USE MODD_CONF_n,      ONLY : CSTORAGE_TYPE
 USE MODD_IO_ll,       ONLY : TFILEDATA, LIOCDF4, LLFIOUT, NIO_VERB, NVERB_DEBUG, TFILE_SURFEX
 USE MODD_LUNIT,       ONLY : CLUOUT0, TPGDFILE, TLUOUT0
-USE MODD_LUNIT_n,     ONLY : CINIFILE
+USE MODD_LUNIT_n,     ONLY : CINIFILE, TINIFILE
 USE MODD_MNH_SURFEX_n
 USE MODD_PARAMETERS,  ONLY : JPMODELMAX,JPHEXT,JPVEXT, NUNDEF, XUNDEF
 USE MODD_TIME_n,      ONLY : TDTCUR
@@ -85,7 +85,6 @@ INTEGER               :: IINFO_ll        ! return code of // routines
 CHARACTER (LEN=100)   :: HCOMMENT
 INTEGER               :: II, IJ, IGRID, ILENGTH
 !
-TYPE(TFILEDATA),POINTER :: TZFILE    => NULL()
 TYPE(TFILEDATA),POINTER :: TZATMFILE => NULL()
 TYPE(TFILEDATA),POINTER :: TZPGDFILE => NULL()
 TYPE(TFILEDATA),POINTER :: TZPRE_REAL1FILE => NULL()
@@ -116,10 +115,6 @@ ILUOUT0 = TLUOUT0%NLU
 !
 TPGDFILE => TZPGDFILE
 !
-CALL IO_FILE_ADD2LIST(TZFILE,TRIM(CINIFILE),'PREPSURFEX','WRITE',KLFITYPE=1,KLFIVERB=1)
-!
-CALL IO_FILE_OPEN_ll(TZFILE)
-!
 !-------------------------------------------------------------------------------
 !
 !*       3.    INITIALIZATION OF PHYSICAL CONSTANTS
@@ -184,17 +179,21 @@ YSURF_CUR => YSURF_LIST(1)
 CALL READ_ALL_NAMELISTS(YSURF_CUR,'MESONH','PRE',.FALSE.)
 CALL GOTO_SURFEX(1)
 !
-TFILE_SURFEX => TZFILE
+CALL IO_FILE_ADD2LIST(TINIFILE,TRIM(CINIFILE),'PREPSURFEX','WRITE',KLFITYPE=1,KLFIVERB=1)
+!
+CALL IO_FILE_OPEN_ll(TINIFILE)
+!
+TFILE_SURFEX => TINIFILE
 CALL PREP_SURF_MNH(YATMFILE,YATMFILETYPE)
 NULLIFY(TFILE_SURFEX)
 !
 !-------------------------------------------------------------------------------
 !
-CALL IO_WRITE_HEADER(TZFILE)
-CALL IO_WRITE_FIELD(TZFILE,'SURF','EXTE')
-CALL IO_WRITE_FIELD(TZFILE,'L1D', L1D)
-CALL IO_WRITE_FIELD(TZFILE,'L2D', L2D)
-CALL IO_WRITE_FIELD(TZFILE,'PACK',LPACK)
+CALL IO_WRITE_HEADER(TINIFILE)
+CALL IO_WRITE_FIELD(TINIFILE,'SURF','EXTE')
+CALL IO_WRITE_FIELD(TINIFILE,'L1D', L1D)
+CALL IO_WRITE_FIELD(TINIFILE,'L2D', L2D)
+CALL IO_WRITE_FIELD(TINIFILE,'PACK',LPACK)
 !
 !-------------------------------------------------------------------------------
 WRITE(ILUOUT0,*) ' '
@@ -203,7 +202,7 @@ WRITE(ILUOUT0,*) '|                                |'
 WRITE(ILUOUT0,*) '|   PREP_SURFEX ends correctly   |'
 WRITE(ILUOUT0,*) '|                                |'
 WRITE(ILUOUT0,*) '----------------------------------'
-CALL IO_FILE_CLOSE_ll(TZFILE)
+CALL IO_FILE_CLOSE_ll(TINIFILE)
 !
 IF(NIO_VERB>=NVERB_DEBUG) CALL IO_FILE_PRINT_LIST()
 !