diff --git a/src/LIB/SURCOUCHE/src/io_write_field.f90 b/src/LIB/SURCOUCHE/src/io_write_field.f90
index 6213e0ece1bd83072c8dfadf647a89b9e7417d4f..834c7258130797ac7484709a193c34feae8e79e0 100644
--- a/src/LIB/SURCOUCHE/src/io_write_field.f90
+++ b/src/LIB/SURCOUCHE/src/io_write_field.f90
@@ -46,6 +46,19 @@ DO JI = 1,SIZE(TPOUTPUT%NFIELDLIST)
           END IF
           CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TFIELDLIST(IDX),HFIPRI,IRESP,TFIELDLIST(IDX)%TFIELD_L0D(IMI)%DATA)
         !
+        !0D real
+        !
+        CASE (TYPEREAL)
+          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_X0D) ) THEN
+            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_X0D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+            STOP
+          END IF
+          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_X0D(IMI)%DATA) ) THEN
+            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_X0D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+            STOP
+          END IF
+          CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TFIELDLIST(IDX),HFIPRI,IRESP,TFIELDLIST(IDX)%TFIELD_X0D(IMI)%DATA)
+        !
         !0D other types
         !
         CASE DEFAULT
diff --git a/src/LIB/SURCOUCHE/src/mode_field.f90 b/src/LIB/SURCOUCHE/src/mode_field.f90
index 5a3dfb321f43f1f1fefa281720015208b7709ead..df87dded9351d1d11a6458326ac9a5c1a1382d13 100644
--- a/src/LIB/SURCOUCHE/src/mode_field.f90
+++ b/src/LIB/SURCOUCHE/src/mode_field.f90
@@ -18,6 +18,10 @@ TYPE TFIELDPTR_L0D
   LOGICAL,              POINTER :: DATA => NULL()
 END TYPE TFIELDPTR_L0D
 !
+TYPE TFIELDPTR_X0D
+  REAL,                 POINTER :: DATA => NULL()
+END TYPE TFIELDPTR_X0D
+!
 TYPE TFIELDPTR_X1D
   REAL,DIMENSION(:),    POINTER :: DATA => NULL()
 END TYPE TFIELDPTR_X1D
@@ -44,6 +48,7 @@ TYPE TFIELDDATA
   !
   TYPE(TFIELDPTR_L0D),DIMENSION(:),ALLOCATABLE :: TFIELD_L0D !Pointer to the scalar logical fields (one per nested mesh)
   !
+  TYPE(TFIELDPTR_X0D),DIMENSION(:),ALLOCATABLE :: TFIELD_X0D !Pointer to the scalar real fields (one per nested mesh)
   TYPE(TFIELDPTR_X1D),DIMENSION(:),ALLOCATABLE :: TFIELD_X1D !Pointer to the real 1D fields (one per nested mesh)
   TYPE(TFIELDPTR_X2D),DIMENSION(:),ALLOCATABLE :: TFIELD_X2D !Pointer to the real 2D fields (one per nested mesh)
   TYPE(TFIELDPTR_X3D),DIMENSION(:),ALLOCATABLE :: TFIELD_X3D !Pointer to the real 3D fields (one per nested mesh)
@@ -69,7 +74,6 @@ CHARACTER(LEN=40) :: YMSG
 !                           CCOMMENT='X_Y_Z_U component of wind (m/s)',NGRID=2)
 !
 CALL PRINT_MSG(NVERB_DEBUG,'GEN','INI_FIELD_LIST','called')
-print *,'PW: nmodel=',nmodel
 IF (LFIELDLIST_ISINIT) THEN
   CALL PRINT_MSG(NVERB_ERROR,'GEN','INI_FIELD_LIST','already called')
   RETURN
@@ -409,6 +413,34 @@ ALLOCATE(TFIELDLIST(IDX)%TFIELD_X1D(IMODEL))
 IDX = IDX+1
 !
 IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'DXHAT'
+!TODO: check stdname
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: DXHAT'
+TFIELDLIST(IDX)%CUNITS     = 'm'
+TFIELDLIST(IDX)%CDIR       = 'XX'
+TFIELDLIST(IDX)%CCOMMENT   = 'Horizontal stretching in x'
+TFIELDLIST(IDX)%NGRID      = 2
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 1
+ALLOCATE(TFIELDLIST(IDX)%TFIELD_X1D(IMODEL))
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'DYHAT'
+!TODO: check stdname
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: DYHAT'
+TFIELDLIST(IDX)%CUNITS     = 'm'
+TFIELDLIST(IDX)%CDIR       = 'YY'
+TFIELDLIST(IDX)%CCOMMENT   = 'Horizontal stretching in y'
+TFIELDLIST(IDX)%NGRID      = 3
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 1
+ALLOCATE(TFIELDLIST(IDX)%TFIELD_X1D(IMODEL))
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
 TFIELDLIST(IDX)%CMNHNAME   = 'ALT'
 TFIELDLIST(IDX)%CSTDNAME   = 'altitude'
 TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: ALT'
@@ -421,10 +453,89 @@ TFIELDLIST(IDX)%NDIMS      = 3
 ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL))
 IDX = IDX+1
 !
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'DIRCOSXW'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: DIRCOSXW'
+TFIELDLIST(IDX)%CUNITS     = ''
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X director cosinus of the normal to the ground surface'
+TFIELDLIST(IDX)%NGRID      = 4
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 2
+ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL))
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'DIRCOSYW'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: DIRCOSYW'
+TFIELDLIST(IDX)%CUNITS     = ''
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'Y director cosinus of the normal to the ground surface'
+TFIELDLIST(IDX)%NGRID      = 4
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 2
+ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL))
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'DIRCOSZW'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: DIRCOSZW'
+TFIELDLIST(IDX)%CUNITS     = ''
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'Z director cosinus of the normal to the ground surface'
+TFIELDLIST(IDX)%NGRID      = 4
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 2
+ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL))
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'COSSLOPE'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: COSSLOPE'
+TFIELDLIST(IDX)%CUNITS     = ''
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'cosinus of the angle between i and the slope vector'
+TFIELDLIST(IDX)%NGRID      = 4
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 2
+ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL))
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'SINSLOPE'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: SINSLOPE'
+TFIELDLIST(IDX)%CUNITS     = ''
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'sinus of the angle between i and the slope vector'
+TFIELDLIST(IDX)%NGRID      = 4
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 2
+ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL))
+IDX = IDX+1
+!
 !
 IF (.NOT.LCARTESIAN) THEN
 !
 IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'MAP'
+!TODO: check stdname
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: MAP'
+TFIELDLIST(IDX)%CUNITS     = ''
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'Map factor'
+TFIELDLIST(IDX)%NGRID      = 1
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 2
+ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL))
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
 TFIELDLIST(IDX)%CMNHNAME   = 'LAT'
 TFIELDLIST(IDX)%CSTDNAME   = 'latitude'
 TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: LAT'
@@ -493,6 +604,32 @@ ALLOCATE(TFIELDLIST(IDX)%TFIELD_L0D(IMODEL))
 IDX = IDX+1
 !
 IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'LEN1'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: LEN1'
+TFIELDLIST(IDX)%CUNITS     = ''
+TFIELDLIST(IDX)%CDIR       = '--'
+TFIELDLIST(IDX)%CCOMMENT   = 'Decay scale for smooth topography'
+TFIELDLIST(IDX)%NGRID      = 4
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 0
+ALLOCATE(TFIELDLIST(IDX)%TFIELD_X0D(IMODEL))
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'LEN2'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: LEN2'
+TFIELDLIST(IDX)%CUNITS     = ''
+TFIELDLIST(IDX)%CDIR       = '--'
+TFIELDLIST(IDX)%CCOMMENT   = 'Decay scale for small-scale topography deviation'
+TFIELDLIST(IDX)%NGRID      = 4
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 0
+ALLOCATE(TFIELDLIST(IDX)%TFIELD_X0D(IMODEL))
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
 TFIELDLIST(IDX)%CMNHNAME   = 'UT'
 TFIELDLIST(IDX)%CSTDNAME   = 'x_wind'
 TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: UT'
@@ -736,8 +873,40 @@ END IF
 !
 END SUBROUTINE FIND_FIELD_ID_FROM_MNHNAME
 !
+!
+SUBROUTINE INI_FIELD_SCALARS
+!
+USE MODD_GRID_n
+!
+INTEGER :: IID,IRESP
+!
+CALL PRINT_MSG(NVERB_DEBUG,'GEN','INI_FIELD_SCALARS','called')
+!
+IF (.NOT.ASSOCIATED(LSLEVE)) THEN
+  CALL PRINT_MSG(NVERB_DEBUG,'GEN','INI_FIELD_SCALARS',' LSLEVE not yet associated')
+  ALLOCATE(LSLEVE)
+  CALL FIND_FIELD_ID_FROM_MNHNAME('SLEVE',IID,IRESP)
+  TFIELDLIST(IID)%TFIELD_L0D(1)%DATA=>LSLEVE
+END IF
+IF (.NOT.ASSOCIATED(XLEN1)) THEN
+  CALL PRINT_MSG(NVERB_DEBUG,'GEN','INI_FIELD_SCALARS',' XLEN1 not yet associated')
+  ALLOCATE(XLEN1)
+  CALL FIND_FIELD_ID_FROM_MNHNAME('LEN1',IID,IRESP)
+  TFIELDLIST(IID)%TFIELD_X0D(1)%DATA=>XLEN1
+END IF
+IF (.NOT.ASSOCIATED(XLEN2)) THEN
+  CALL PRINT_MSG(NVERB_DEBUG,'GEN','INI_FIELD_SCALARS',' XLEN2 not yet associated')
+  ALLOCATE(XLEN2)
+  CALL FIND_FIELD_ID_FROM_MNHNAME('LEN2',IID,IRESP)
+  TFIELDLIST(IID)%TFIELD_X0D(1)%DATA=>XLEN2
+END IF
+!
+END SUBROUTINE INI_FIELD_SCALARS
+!
+!
 SUBROUTINE FIELDLIST_GOTO_MODEL(KFROM, KTO)
 !
+USE MODD_CONF, ONLY: LCARTESIAN
 USE MODD_REF
 !
 USE MODD_FIELD_n
@@ -770,107 +939,137 @@ END IF
 ! Initialize some pointers
 !
 IF (KFROM == KTO) THEN
-  IF (.NOT.ALLOCATED(XRHODREFZ)) THEN
+  IF (.NOT.ALLOCATED(XRHODREFZ) .AND. CPROGRAM/='NESPGD') THEN
     CALL PRINT_MSG(NVERB_FATAL,'GEN','FIELDLIST_GOTO_MODEL','XRHODREFZ not yet allocated')
   END IF
   CALL FIND_FIELD_ID_FROM_MNHNAME('RHOREFZ',IID,IRESP)
   TFIELDLIST(IID)%TFIELD_X1D(KFROM)%DATA=>XRHODREFZ
   !
-  IF (.NOT.ALLOCATED(XTHVREFZ)) THEN
+  IF (.NOT.ALLOCATED(XTHVREFZ) .AND. CPROGRAM/='NESPGD') THEN
     CALL PRINT_MSG(NVERB_FATAL,'GEN','FIELDLIST_GOTO_MODEL','XTHVREFZ not yet allocated')
   END IF
   CALL FIND_FIELD_ID_FROM_MNHNAME('THVREFZ',IID,IRESP)
   TFIELDLIST(IID)%TFIELD_X1D(KFROM)%DATA=>XTHVREFZ
   !
   IF (.NOT.ASSOCIATED(LSLEVE)) THEN
-    CALL PRINT_MSG(NVERB_FATAL,'GEN','FIELDLIST_GOTO_MODEL',' LSLEVE not yet associated')
-    STOP
+    CALL PRINT_MSG(NVERB_DEBUG,'GEN','FIELDLIST_GOTO_MODEL',' LSLEVE not yet associated')
+    ALLOCATE(LSLEVE)
   END IF
   CALL FIND_FIELD_ID_FROM_MNHNAME('SLEVE',IID,IRESP)
   TFIELDLIST(IID)%TFIELD_L0D(KFROM)%DATA=>LSLEVE
   !
+  IF (.NOT.ASSOCIATED(XLEN1)) THEN
+    CALL PRINT_MSG(NVERB_DEBUG,'GEN','FIELDLIST_GOTO_MODEL',' XLEN1 not yet associated')
+    ALLOCATE(XLEN1)
+  END IF
+  CALL FIND_FIELD_ID_FROM_MNHNAME('LEN1',IID,IRESP)
+  TFIELDLIST(IID)%TFIELD_X0D(KFROM)%DATA=>XLEN1
+  !
+  IF (.NOT.ASSOCIATED(XLEN2)) THEN
+    CALL PRINT_MSG(NVERB_DEBUG,'GEN','FIELDLIST_GOTO_MODEL',' XLEN2 not yet associated')
+    ALLOCATE(XLEN2)
+  END IF
+  CALL FIND_FIELD_ID_FROM_MNHNAME('LEN2',IID,IRESP)
+  TFIELDLIST(IID)%TFIELD_X0D(KFROM)%DATA=>XLEN2
 END IF
 !
 ! Save current state for allocated arrays
 !
-CALL FIND_FIELD_ID_FROM_MNHNAME('UT',IID,IRESP)
-TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XUT
-CALL FIND_FIELD_ID_FROM_MNHNAME('VT',IID,IRESP)
-TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XVT
-CALL FIND_FIELD_ID_FROM_MNHNAME('WT',IID,IRESP)
-TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XWT
-CALL FIND_FIELD_ID_FROM_MNHNAME('THT',IID,IRESP)
-TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XTHT
+CALL FIND_FIELD_ID_FROM_MNHNAME('UT', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XUT
+CALL FIND_FIELD_ID_FROM_MNHNAME('VT', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XVT
+CALL FIND_FIELD_ID_FROM_MNHNAME('WT', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XWT
+CALL FIND_FIELD_ID_FROM_MNHNAME('THT',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XTHT
 IF (CPROGRAM == 'MESONH') THEN
-  CALL FIND_FIELD_ID_FROM_MNHNAME('US_PRES',IID,IRESP)
-  TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRUS_PRES
-  CALL FIND_FIELD_ID_FROM_MNHNAME('VS_PRES',IID,IRESP)
-  TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRVS_PRES
-  CALL FIND_FIELD_ID_FROM_MNHNAME('WS_PRES',IID,IRESP)
-  TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRWS_PRES
-  CALL FIND_FIELD_ID_FROM_MNHNAME('THS_CLD',IID,IRESP)
-  TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRTHS_CLD
+  CALL FIND_FIELD_ID_FROM_MNHNAME('US_PRES',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRUS_PRES
+  CALL FIND_FIELD_ID_FROM_MNHNAME('VS_PRES',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRVS_PRES
+  CALL FIND_FIELD_ID_FROM_MNHNAME('WS_PRES',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRWS_PRES
+  CALL FIND_FIELD_ID_FROM_MNHNAME('THS_CLD',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRTHS_CLD
 END IF
-CALL FIND_FIELD_ID_FROM_MNHNAME('LAT',IID,IRESP)
-TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA=>XLAT
-CALL FIND_FIELD_ID_FROM_MNHNAME('LON',IID,IRESP)
-TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA=>XLON
-CALL FIND_FIELD_ID_FROM_MNHNAME('ZS',IID,IRESP)
-TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA=>XZS
-CALL FIND_FIELD_ID_FROM_MNHNAME('ZSMT',IID,IRESP)
-TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA=>XZSMT
-CALL FIND_FIELD_ID_FROM_MNHNAME('XHAT',IID,IRESP)
-TFIELDLIST(IID)%TFIELD_X1D(KFROM)%DATA=>XXHAT
-CALL FIND_FIELD_ID_FROM_MNHNAME('YHAT',IID,IRESP)
-TFIELDLIST(IID)%TFIELD_X1D(KFROM)%DATA=>XYHAT
-CALL FIND_FIELD_ID_FROM_MNHNAME('ZHAT',IID,IRESP)
-TFIELDLIST(IID)%TFIELD_X1D(KFROM)%DATA=>XZHAT
-CALL FIND_FIELD_ID_FROM_MNHNAME('ALT',IID,IRESP)
-TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XZZ
-CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRR',IID,IRESP)
-TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA=>XACPRR
+!
+! MODD_GRID_n variables
+!
+CALL FIND_FIELD_ID_FROM_MNHNAME('ZS',   IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA=>XZS
+CALL FIND_FIELD_ID_FROM_MNHNAME('ZSMT', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA=>XZSMT
+CALL FIND_FIELD_ID_FROM_MNHNAME('XHAT', IID,IRESP); TFIELDLIST(IID)%TFIELD_X1D(KFROM)%DATA=>XXHAT
+CALL FIND_FIELD_ID_FROM_MNHNAME('YHAT', IID,IRESP); TFIELDLIST(IID)%TFIELD_X1D(KFROM)%DATA=>XYHAT
+CALL FIND_FIELD_ID_FROM_MNHNAME('ZHAT', IID,IRESP); TFIELDLIST(IID)%TFIELD_X1D(KFROM)%DATA=>XZHAT
+CALL FIND_FIELD_ID_FROM_MNHNAME('DXHAT',IID,IRESP); TFIELDLIST(IID)%TFIELD_X1D(KFROM)%DATA=>XDXHAT
+CALL FIND_FIELD_ID_FROM_MNHNAME('DYHAT',IID,IRESP); TFIELDLIST(IID)%TFIELD_X1D(KFROM)%DATA=>XDYHAT
+CALL FIND_FIELD_ID_FROM_MNHNAME('DYHAT',IID,IRESP); TFIELDLIST(IID)%TFIELD_X1D(KFROM)%DATA=>XDYHAT
+CALL FIND_FIELD_ID_FROM_MNHNAME('ALT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XZZ
+CALL FIND_FIELD_ID_FROM_MNHNAME('DIRCOSXW',IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA=>XDIRCOSXW
+CALL FIND_FIELD_ID_FROM_MNHNAME('DIRCOSYW',IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA=>XDIRCOSYW
+CALL FIND_FIELD_ID_FROM_MNHNAME('DIRCOSZW',IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA=>XDIRCOSZW
+CALL FIND_FIELD_ID_FROM_MNHNAME('COSSLOPE',IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA=>XCOSSLOPE
+CALL FIND_FIELD_ID_FROM_MNHNAME('SINSLOPE',IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA=>XSINSLOPE
+IF (.NOT.LCARTESIAN) THEN
+  CALL FIND_FIELD_ID_FROM_MNHNAME('MAP',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA=>XMAP
+  CALL FIND_FIELD_ID_FROM_MNHNAME('LAT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA=>XLAT
+  CALL FIND_FIELD_ID_FROM_MNHNAME('LON',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA=>XLON
+END IF
+!
+!
+CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRR',IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA=>XACPRR
 !
 ! Current model is set to model KTO
 !
 IF( KFROM/=KTO) THEN
-CALL FIND_FIELD_ID_FROM_MNHNAME('UT',IID,IRESP)
-XUT=>TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
-CALL FIND_FIELD_ID_FROM_MNHNAME('VT',IID,IRESP)
-XVT=>TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
-CALL FIND_FIELD_ID_FROM_MNHNAME('WT',IID,IRESP)
-XWT=>TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
-CALL FIND_FIELD_ID_FROM_MNHNAME('THT',IID,IRESP)
-XTHT=>TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+CALL FIND_FIELD_ID_FROM_MNHNAME('UT', IID,IRESP); XUT=> TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+CALL FIND_FIELD_ID_FROM_MNHNAME('VT', IID,IRESP); XVT=> TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+CALL FIND_FIELD_ID_FROM_MNHNAME('WT', IID,IRESP); XWT=> TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+CALL FIND_FIELD_ID_FROM_MNHNAME('THT',IID,IRESP); XTHT=>TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
 IF (CPROGRAM == 'MESONH') THEN
-  CALL FIND_FIELD_ID_FROM_MNHNAME('US_PRES',IID,IRESP)
-  XRUS_PRES=>TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
-  CALL FIND_FIELD_ID_FROM_MNHNAME('VS_PRES',IID,IRESP)
-  XRVS_PRES=>TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
-  CALL FIND_FIELD_ID_FROM_MNHNAME('WS_PRES',IID,IRESP)
-  XRWS_PRES=>TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
-  CALL FIND_FIELD_ID_FROM_MNHNAME('THS_CLD',IID,IRESP)
-  XRTHS_CLD=>TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+  CALL FIND_FIELD_ID_FROM_MNHNAME('US_PRES',IID,IRESP);XRUS_PRES=>TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+  CALL FIND_FIELD_ID_FROM_MNHNAME('VS_PRES',IID,IRESP);XRVS_PRES=>TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+  CALL FIND_FIELD_ID_FROM_MNHNAME('WS_PRES',IID,IRESP);XRWS_PRES=>TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+  CALL FIND_FIELD_ID_FROM_MNHNAME('THS_CLD',IID,IRESP);XRTHS_CLD=>TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
 END IF
-CALL FIND_FIELD_ID_FROM_MNHNAME('LAT',IID,IRESP)
-XLAT=>TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
-CALL FIND_FIELD_ID_FROM_MNHNAME('LON',IID,IRESP)
-XLON=>TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
-CALL FIND_FIELD_ID_FROM_MNHNAME('ZS',IID,IRESP)
-XZS=>TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
-CALL FIND_FIELD_ID_FROM_MNHNAME('ZSMT',IID,IRESP)
-XZSMT=>TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
-CALL FIND_FIELD_ID_FROM_MNHNAME('XHAT',IID,IRESP)
-XXHAT=>TFIELDLIST(IID)%TFIELD_X1D(KTO)%DATA
-CALL FIND_FIELD_ID_FROM_MNHNAME('YHAT',IID,IRESP)
-XYHAT=>TFIELDLIST(IID)%TFIELD_X1D(KTO)%DATA
-CALL FIND_FIELD_ID_FROM_MNHNAME('ZHAT',IID,IRESP)
-XZHAT=>TFIELDLIST(IID)%TFIELD_X1D(KTO)%DATA
+!
+! MODD_GRID_n variables
+!
+CALL FIND_FIELD_ID_FROM_MNHNAME('ZS',   IID,IRESP); XZS=>   TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
+CALL FIND_FIELD_ID_FROM_MNHNAME('ZSMT', IID,IRESP); XZSMT=> TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
+CALL FIND_FIELD_ID_FROM_MNHNAME('XHAT', IID,IRESP); XXHAT=> TFIELDLIST(IID)%TFIELD_X1D(KTO)%DATA
+CALL FIND_FIELD_ID_FROM_MNHNAME('YHAT', IID,IRESP); XYHAT=> TFIELDLIST(IID)%TFIELD_X1D(KTO)%DATA
+CALL FIND_FIELD_ID_FROM_MNHNAME('ZHAT', IID,IRESP); XZHAT=> TFIELDLIST(IID)%TFIELD_X1D(KTO)%DATA
+CALL FIND_FIELD_ID_FROM_MNHNAME('DXHAT',IID,IRESP); XDXHAT=>TFIELDLIST(IID)%TFIELD_X1D(KTO)%DATA
+CALL FIND_FIELD_ID_FROM_MNHNAME('DYHAT',IID,IRESP); XDYHAT=>TFIELDLIST(IID)%TFIELD_X1D(KTO)%DATA
+!
 CALL FIND_FIELD_ID_FROM_MNHNAME('SLEVE',IID,IRESP)
+IF (.NOT.ASSOCIATED(TFIELDLIST(IID)%TFIELD_L0D(KTO)%DATA)) THEN
+  CALL PRINT_MSG(NVERB_DEBUG,'GEN','FIELDLIST_GOTO_MODEL',' TFIELDLIST(IID)%TFIELD_L0D(KTO)%DATA not yet associated')
+  ALLOCATE(TFIELDLIST(IID)%TFIELD_L0D(KTO)%DATA)
+END IF
 LSLEVE=>TFIELDLIST(IID)%TFIELD_L0D(KTO)%DATA
-CALL FIND_FIELD_ID_FROM_MNHNAME('ALT',IID,IRESP)
-XZZ=>TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
-CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRR',IID,IRESP)
-XACPRR=>TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
+!
+CALL FIND_FIELD_ID_FROM_MNHNAME('LEN1',IID,IRESP)
+IF (.NOT.ASSOCIATED(TFIELDLIST(IID)%TFIELD_X0D(KTO)%DATA)) THEN
+  CALL PRINT_MSG(NVERB_DEBUG,'GEN','FIELDLIST_GOTO_MODEL',' TFIELDLIST(IID)%TFIELD_X0D(KTO)%DATA not yet associated')
+  ALLOCATE(TFIELDLIST(IID)%TFIELD_X0D(KTO)%DATA)
+END IF
+XLEN1=>TFIELDLIST(IID)%TFIELD_X0D(KTO)%DATA
+!
+CALL FIND_FIELD_ID_FROM_MNHNAME('LEN2',IID,IRESP)
+IF (.NOT.ASSOCIATED(TFIELDLIST(IID)%TFIELD_X0D(KTO)%DATA)) THEN
+  CALL PRINT_MSG(NVERB_DEBUG,'GEN','FIELDLIST_GOTO_MODEL',' TFIELDLIST(IID)%TFIELD_X0D(KTO)%DATA not yet associated')
+  ALLOCATE(TFIELDLIST(IID)%TFIELD_X0D(KTO)%DATA)
+END IF
+XLEN2=>TFIELDLIST(IID)%TFIELD_X0D(KTO)%DATA
+!
+CALL FIND_FIELD_ID_FROM_MNHNAME('ALT',     IID,IRESP); XZZ=>      TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+CALL FIND_FIELD_ID_FROM_MNHNAME('DIRCOSXW',IID,IRESP); XDIRCOSXW=>TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
+CALL FIND_FIELD_ID_FROM_MNHNAME('DIRCOSYW',IID,IRESP); XDIRCOSYW=>TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
+CALL FIND_FIELD_ID_FROM_MNHNAME('DIRCOSZW',IID,IRESP); XDIRCOSZW=>TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
+CALL FIND_FIELD_ID_FROM_MNHNAME('COSSLOPE',IID,IRESP); XCOSSLOPE=>TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
+CALL FIND_FIELD_ID_FROM_MNHNAME('SINSLOPE',IID,IRESP); XSINSLOPE=>TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
+IF (.NOT.LCARTESIAN) THEN
+  CALL FIND_FIELD_ID_FROM_MNHNAME('MAP',  IID,IRESP); XMAP=>  TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
+  CALL FIND_FIELD_ID_FROM_MNHNAME('LAT',  IID,IRESP); XLAT=>  TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
+  CALL FIND_FIELD_ID_FROM_MNHNAME('LON',  IID,IRESP); XLON=>  TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
+END IF
+!
+!
+CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRR',IID,IRESP); XACPRR=>TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
 END IF
 !
 END SUBROUTINE FIELDLIST_GOTO_MODEL
diff --git a/src/MNH/goto_model_wrapper.f90 b/src/MNH/goto_model_wrapper.f90
index 1d861c630265f76711e56ec16accf36377b5797e..bdbd8e0eea93c32c177d270fc8411915373b0d5c 100644
--- a/src/MNH/goto_model_wrapper.f90
+++ b/src/MNH/goto_model_wrapper.f90
@@ -147,7 +147,6 @@ CALL GR_FIELD_GOTO_MODEL(KFROM, KTO)
 !$20140403 add grid_conf_proj_goto_model
 !CALL GRID_CONF_PROJ_GOTO_MODEL(KFROM,KTO)
 !$
-CALL GRID_GOTO_MODEL(KFROM, KTO)
 CALL HURR_FIELD_GOTO_MODEL(KFROM, KTO)
 !$20140403 add io_surf_mnh_goto_model!!
 CALL IO_SURF_MNH_GOTO_MODEL(KFROM, KTO)
diff --git a/src/MNH/init_mnh.f90 b/src/MNH/init_mnh.f90
index 9405e8e55261a5b566af703d03a8b55962939813..f98cf0960f2bd6ca01c180ac5ce43d4a536972c9 100644
--- a/src/MNH/init_mnh.f90
+++ b/src/MNH/init_mnh.f90
@@ -209,15 +209,24 @@ CALL INI_PARAZ_ll(IINFO_ll)
 !
 !     Allocations of Surfex Types
 CALL SURFEX_ALLOC_LIST(NMODEL)
+!
+IF (CPROGRAM=='SPAWN ') THEN
+  CALL INI_FIELD_LIST(2)
+ELSE IF (CPROGRAM/='REAL  ' .AND. CPROGRAM/='IDEAL ' ) THEN
+  CALL INI_FIELD_LIST()
+END IF
+IF (CPROGRAM=='SPAWN ' .OR. CPROGRAM=='DIAG  ' .OR. CPROGRAM=='SPEC  ' .OR. CPROGRAM=='MESONH') THEN
+  CALL INI_FIELD_SCALARS()
+END IF
+
+!
 DO JMI=1,NMODEL
   YSURF_CUR => YSURF_LIST(JMI)
 !
   IF (CPROGRAM=='SPAWN ' .OR. CPROGRAM=='REAL  ') THEN 
     CALL READ_ALL_NAMELISTS(YSURF_CUR,'MESONH','PRE',.FALSE.)
-    CALL INI_FIELD_LIST(2)
   ELSE
     CALL READ_ALL_NAMELISTS(YSURF_CUR,'MESONH','ALL',.TRUE.)
-    CALL INI_FIELD_LIST()
   ENDIF
 ENDDO
 !
diff --git a/src/MNH/modd_gridn.f90 b/src/MNH/modd_gridn.f90
index ad6b44aae42337e8145bcdb53bc5e0ba71eedc4c..68e03c97e19f9d42233d9c0780cb29fcba0ccdbc 100644
--- a/src/MNH/modd_gridn.f90
+++ b/src/MNH/modd_gridn.f90
@@ -48,102 +48,23 @@
 USE MODD_PARAMETERS, ONLY: JPMODELMAX
 IMPLICIT NONE
 
-TYPE GRID_t
-!  REAL, DIMENSION(:,:), POINTER :: XLON=>NULL(),XLAT=>NULL() ! Longitude and latitude  
-!
-!  REAL, DIMENSION(:),   POINTER :: XXHAT=>NULL()   ! Position x in the 
-!                                         ! conformal or cartesian plane
-!  REAL, DIMENSION(:),   POINTER :: XYHAT=>NULL()   ! Position y in the 
-!                                         ! conformal or cartesian plane
-  REAL, DIMENSION(:),   POINTER :: XDXHAT=>NULL()  ! horizontal stretching in x
-  REAL, DIMENSION(:),   POINTER :: XDYHAT=>NULL()  ! horizontal stretching in y
-  REAL, DIMENSION(:,:), POINTER :: XMAP=>NULL()    ! Map factor 
-!
-!  REAL, DIMENSION(:,:),   POINTER :: XZS=>NULL()   ! orography
-!  REAL, DIMENSION(:,:,:), POINTER :: XZZ=>NULL()   ! height z 
-!  REAL, DIMENSION(:),     POINTER :: XZHAT=>NULL() ! height level without orography
-!
-  REAL, DIMENSION(:,:)  , POINTER :: XDIRCOSXW=>NULL(),XDIRCOSYW=>NULL(),XDIRCOSZW=>NULL() 
-                                               ! director cosinus of the normal 
-                                               ! to the ground surface 
-!  
-  REAL, DIMENSION(:,:),  POINTER  ::  XCOSSLOPE=>NULL()  ! cosinus of the angle
-                                 ! between i and the slope vector
-  REAL, DIMENSION(:,:),  POINTER  ::  XSINSLOPE=>NULL()  ! sinus of the angle
-                                 ! between i and the slope vector
-! quantities for SLEVE vertical coordinate
-!  LOGICAL                         :: LSLEVE    ! Logical for SLEVE coordinate
-  REAL                            :: XLEN1     ! Decay scale for smooth topography
-  REAL                            :: XLEN2     ! Decay scale for small-scale topography deviation
-!  REAL, DIMENSION(:,:),   POINTER :: XZSMT=>NULL()   ! smooth orography for SLEVE coordinate
-END TYPE GRID_t
-
-TYPE(GRID_t), DIMENSION(JPMODELMAX), TARGET, SAVE :: GRID_MODEL
-
-REAL, DIMENSION(:,:), POINTER :: XLON=>NULL(),XLAT=>NULL()
-REAL, DIMENSION(:),   POINTER :: XXHAT=>NULL()
-REAL, DIMENSION(:),   POINTER :: XYHAT=>NULL()
-REAL, DIMENSION(:),   POINTER :: XDXHAT=>NULL()
-REAL, DIMENSION(:),   POINTER :: XDYHAT=>NULL()
-REAL, DIMENSION(:,:), POINTER :: XMAP=>NULL()
-REAL, DIMENSION(:,:),   POINTER :: XZS=>NULL()
-REAL, DIMENSION(:,:,:), POINTER :: XZZ=>NULL()
-REAL, DIMENSION(:),     POINTER :: XZHAT=>NULL()
-REAL, DIMENSION(:,:)  , POINTER :: XDIRCOSXW=>NULL(),XDIRCOSYW=>NULL(),XDIRCOSZW=>NULL()
-REAL, DIMENSION(:,:),  POINTER  :: XCOSSLOPE=>NULL()
-REAL, DIMENSION(:,:),  POINTER  :: XSINSLOPE=>NULL()
-LOGICAL,               POINTER  :: LSLEVE=>NULL()
-REAL,                  POINTER  :: XLEN1=>NULL()
-REAL,                  POINTER  :: XLEN2=>NULL()
-REAL, DIMENSION(:,:),  POINTER  :: XZSMT=>NULL()
-
-CONTAINS
-
-SUBROUTINE GRID_GOTO_MODEL(KFROM, KTO)
-!
-INTEGER, INTENT(IN) :: KFROM, KTO
-!
-! Save current state for allocated arrays
-!GRID_MODEL(KFROM)%XLON=>XLON !Done in FIELDLIST_GOTO_MODEL
-!GRID_MODEL(KFROM)%XLAT=>XLAT !Done in FIELDLIST_GOTO_MODEL
-!GRID_MODEL(KFROM)%XXHAT=>XXHAT !Done in FIELDLIST_GOTO_MODEL
-!GRID_MODEL(KFROM)%XYHAT=>XYHAT !Done in FIELDLIST_GOTO_MODEL
-GRID_MODEL(KFROM)%XDXHAT=>XDXHAT
-GRID_MODEL(KFROM)%XDYHAT=>XDYHAT
-GRID_MODEL(KFROM)%XMAP=>XMAP
-!GRID_MODEL(KFROM)%XZS=>XZS !Done in FIELDLIST_GOTO_MODEL
-!GRID_MODEL(KFROM)%XZZ=>XZZ !Done in FIELDLIST_GOTO_MODEL
-!GRID_MODEL(KFROM)%XZHAT=>XZHAT !Done in FIELDLIST_GOTO_MODEL
-GRID_MODEL(KFROM)%XDIRCOSXW=>XDIRCOSXW
-GRID_MODEL(KFROM)%XDIRCOSYW=>XDIRCOSYW
-GRID_MODEL(KFROM)%XDIRCOSZW=>XDIRCOSZW
-GRID_MODEL(KFROM)%XCOSSLOPE=>XCOSSLOPE
-GRID_MODEL(KFROM)%XSINSLOPE=>XSINSLOPE
-!GRID_MODEL(KFROM)%XZSMT=>XZSMT !Done in FIELDLIST_GOTO_MODEL
-!
-! Current model is set to model KTO
-!XLON=>GRID_MODEL(KTO)%XLON !Done in FIELDLIST_GOTO_MODEL
-!XLAT=>GRID_MODEL(KTO)%XLAT !Done in FIELDLIST_GOTO_MODEL
-!XXHAT=>GRID_MODEL(KTO)%XXHAT !Done in FIELDLIST_GOTO_MODEL
-!XYHAT=>GRID_MODEL(KTO)%XYHAT !Done in FIELDLIST_GOTO_MODEL
-XDXHAT=>GRID_MODEL(KTO)%XDXHAT
-XDYHAT=>GRID_MODEL(KTO)%XDYHAT
-XMAP=>GRID_MODEL(KTO)%XMAP
-!XZS=>GRID_MODEL(KTO)%XZS !Done in FIELDLIST_GOTO_MODEL
-!XZZ=>GRID_MODEL(KTO)%XZZ !Done in FIELDLIST_GOTO_MODEL
-!XZHAT=>GRID_MODEL(KTO)%XZHAT !Done in FIELDLIST_GOTO_MODEL
-XDIRCOSXW=>GRID_MODEL(KTO)%XDIRCOSXW
-XDIRCOSYW=>GRID_MODEL(KTO)%XDIRCOSYW
-XDIRCOSZW=>GRID_MODEL(KTO)%XDIRCOSZW
-XCOSSLOPE=>GRID_MODEL(KTO)%XCOSSLOPE
-XSINSLOPE=>GRID_MODEL(KTO)%XSINSLOPE
-!LSLEVE=>GRID_MODEL(KTO)%LSLEVE !Done in FIELDLIST_GOTO_MODEL
-XLEN1=>GRID_MODEL(KTO)%XLEN1
-XLEN2=>GRID_MODEL(KTO)%XLEN2
-!XZSMT=>GRID_MODEL(KTO)%XZSMT !Done in FIELDLIST_GOTO_MODEL
-
-IF (.NOT.ASSOCIATED(LSLEVE)) ALLOCATE(LSLEVE)
-
-END SUBROUTINE GRID_GOTO_MODEL
+REAL, DIMENSION(:,:),  POINTER :: XLON=>NULL(),XLAT=>NULL() ! Longitude and latitude  
+REAL, DIMENSION(:),    POINTER :: XXHAT=>NULL()             ! Position x in the conformal or cartesian plane
+REAL, DIMENSION(:),    POINTER :: XYHAT=>NULL()             ! Position y in the conformal or cartesian plane
+REAL, DIMENSION(:),    POINTER :: XDXHAT=>NULL()            ! horizontal stretching in x
+REAL, DIMENSION(:),    POINTER :: XDYHAT=>NULL()            ! horizontal stretching in y
+REAL, DIMENSION(:,:),  POINTER :: XMAP=>NULL()              ! Map factor 
+REAL, DIMENSION(:,:),  POINTER :: XZS=>NULL()               ! orography
+REAL, DIMENSION(:,:,:),POINTER :: XZZ=>NULL()               ! height z 
+REAL, DIMENSION(:),    POINTER :: XZHAT=>NULL()             ! height level without orography
+REAL, DIMENSION(:,:),  POINTER :: XDIRCOSXW=>NULL(),XDIRCOSYW=>NULL(),XDIRCOSZW=>NULL() ! director cosinus of the normal
+                                                                                        ! to the ground surface
+REAL, DIMENSION(:,:),  POINTER  :: XCOSSLOPE=>NULL()         ! cosinus of the angle between i and the slope vector
+REAL, DIMENSION(:,:),  POINTER  :: XSINSLOPE=>NULL()         ! sinus   of the angle between i and the slope vector
+! Quantities for SLEVE vertical coordinate
+LOGICAL,               POINTER  :: LSLEVE=>NULL()            ! Logical for SLEVE coordinate
+REAL,                  POINTER  :: XLEN1=>NULL()             ! Decay scale for smooth topography
+REAL,                  POINTER  :: XLEN2=>NULL()             ! Decay scale for small-scale topography deviation
+REAL, DIMENSION(:,:),  POINTER  :: XZSMT=>NULL()             ! smooth orography for SLEVE coordinate
 
 END MODULE MODD_GRID_n
diff --git a/src/MNH/modd_spawn.f90 b/src/MNH/modd_spawn.f90
index 0d8e13504f642b178820c6d5f76d6f0798759777..8af3b8458657413151bfe60b53e625799d2c6ff9 100644
--- a/src/MNH/modd_spawn.f90
+++ b/src/MNH/modd_spawn.f90
@@ -71,6 +71,8 @@ REAL,DIMENSION(:,:),  SAVE,POINTER :: XZS1
 REAL,DIMENSION(:,:),  SAVE,POINTER :: XZSMT1
 REAL,DIMENSION(:,:,:),SAVE,POINTER :: XZZ1
 LOGICAL,              SAVE,POINTER :: LSLEVE1
+REAL,                 SAVE,POINTER :: XLEN11
+REAL,                 SAVE,POINTER :: XLEN21
 REAL,DIMENSION(:,:),  SAVE,POINTER :: XACPRR1
 REAL,DIMENSION(:,:,:),SAVE,POINTER :: XTHT1
 REAL,DIMENSION(:,:,:),SAVE,POINTER :: XUT1
diff --git a/src/MNH/open_nestpgd_files.f90 b/src/MNH/open_nestpgd_files.f90
index e9b5de36a9cae42a682435663c8c158394d0071e..08e9a6e1c39bd7b170559b879a7e3b1ea65c26b1 100644
--- a/src/MNH/open_nestpgd_files.f90
+++ b/src/MNH/open_nestpgd_files.f90
@@ -81,6 +81,7 @@ USE MODD_PARAMETERS
 !
 USE MODI_OPEN_LUOUTn
 !
+USE MODE_FIELD, ONLY : INI_FIELD_LIST
 USE MODE_IO_ll
 USE MODE_FM
 USE MODE_POS
@@ -317,6 +318,8 @@ END DO
 !*       7.    OPENING OF OUPUT LISTING FILES FOR ALL MODELS
 !              ----------------------------------------------
 !
+CALL INI_FIELD_LIST()
+!
 DO JPGD=1,NMODEL
   CALL GOTO_MODEL(JPGD)
   WRITE(YLUOUT,'("OUTPUT_LISTING",I0)') JPGD
diff --git a/src/MNH/prep_ideal_case.f90 b/src/MNH/prep_ideal_case.f90
index c7061ece35bc46544251eff9183efec681e19d65..17bdf5bba002902959a890bcfa76bbf774d9765f 100644
--- a/src/MNH/prep_ideal_case.f90
+++ b/src/MNH/prep_ideal_case.f90
@@ -865,6 +865,10 @@ CALL INI_NSV(1)
 LHORELAX_SV(:)=.FALSE.
 IF(.NOT. L1D) LHORELAX_SV(1:NSV)=.TRUE.
 !
+CALL INI_FIELD_LIST()
+!
+CALL INI_FIELD_SCALARS()
+!
 !-------------------------------------------------------------------------------
 !
 !*       4.    ALLOCATE MEMORY FOR ARRAYS :  
@@ -1749,8 +1753,6 @@ TZFILE%CMODE      = 'WRITE'
 TZFILE%NLFITYPE   = NTYPE
 TZFILE%NLFIVERB   = NVERB
 !
-CALL INI_FIELD_LIST()
-!
 CALL IO_FILE_OPEN_ll(TZFILE,CLUOUT,NRESP)
 !
 CALL WRITE_DESFM_n(1,CDESFM,CLUOUT)
diff --git a/src/MNH/prep_real_case.f90 b/src/MNH/prep_real_case.f90
index 74cfd64df8890b3bbb8ffd856636203f727fc9e3..ba202ec021959ab332f5544c087aa48fa7b54448 100644
--- a/src/MNH/prep_real_case.f90
+++ b/src/MNH/prep_real_case.f90
@@ -395,6 +395,7 @@ USE MODE_IO_ll
 USE MODE_ll
 USE MODE_MODELN_HANDLER
 USE MODE_FMREAD
+USE MODE_FIELD
 USE MODN_CONFZ
 !
 USE MODI_DEFAULT_DESFM_n   ! interface modules
@@ -633,6 +634,10 @@ CALL INIT_NMLVAR
 CALL POSNAM(IPRE_REAL1,'NAM_REAL_CONF',GFOUND,ILUOUT0)
 IF (GFOUND) READ(IPRE_REAL1,NAM_REAL_CONF)
 !
+CALL INI_FIELD_LIST()
+!
+CALL INI_FIELD_SCALARS()
+!
 !*       4.2   reading of values of some configuration variables in namelist
 !
 !
diff --git a/src/MNH/spawn_field2.f90 b/src/MNH/spawn_field2.f90
index 3a54d23dbf53f44650e8000b1756e557249c6961..c5306792d969afa7215840b2b1c5f7ec3397016c 100644
--- a/src/MNH/spawn_field2.f90
+++ b/src/MNH/spawn_field2.f90
@@ -155,7 +155,6 @@ USE MODD_PARAMETERS       ! Declarative modules
 USE MODD_CONF
 USE MODD_CST
 !
-USE MODD_GRID_n,   ONLY:  GRID_MODEL 
 USE MODD_CONF_n,   ONLY:  CONF_MODEL
 USE MODD_LBC_n,    ONLY:  LBC_MODEL
 USE MODD_LUNIT_n,  ONLY:  LUNIT_MODEL
diff --git a/src/MNH/spawn_grid2.f90 b/src/MNH/spawn_grid2.f90
index 34920a8bc4cfe18da32d857808ba6c02c63d92b4..450d7dbf67d1de638aad61da2e165f99aa1569c6 100644
--- a/src/MNH/spawn_grid2.f90
+++ b/src/MNH/spawn_grid2.f90
@@ -160,7 +160,6 @@ USE MODD_CONF
 USE MODD_SPAWN
 !
 USE MODD_GRID, ONLY: XLONORI,XLATORI 
-USE MODD_GRID_n,    ONLY: GRID_MODEL
 USE MODD_TIME_n,    ONLY: TIME_MODEL
 USE MODD_LBC_n,     ONLY: LBC_MODEL
 !
@@ -312,8 +311,8 @@ END IF
 !
 PZHAT(:) = XZHAT1(:) 
 OSLEVE   = LSLEVE1
-PLEN1    = GRID_MODEL(1)%XLEN1
-PLEN2    = GRID_MODEL(1)%XLEN2
+PLEN1    = XLEN11
+PLEN2    = XLEN21
 !
 IF (KDXRATIO == 1 .AND. KDYRATIO == 1 ) THEN
 !
diff --git a/src/MNH/spawn_pressure2.f90 b/src/MNH/spawn_pressure2.f90
index 431f13a8258f89662097a21dd55b0b7e8dd1c00c..6d657354b69444eec55cbdb017757ba8bf3ab492 100644
--- a/src/MNH/spawn_pressure2.f90
+++ b/src/MNH/spawn_pressure2.f90
@@ -115,7 +115,6 @@ USE MODD_PARAMETERS       ! Declarative modules
 USE MODD_CONF
 USE MODD_CST
 !
-USE MODD_GRID_n, ONLY: GRID_MODEL 
 USE MODD_CONF_n, ONLY: CONF_MODEL
 USE MODD_LBC_n,  ONLY: LBC_MODEL
 USE MODD_LUNIT_n,ONLY: LUNIT_MODEL
diff --git a/src/MNH/spawning.f90 b/src/MNH/spawning.f90
index ce4070b7b02ce2e821d42b3d9c3915a16715858a..4a0dfa97375090633154d84c9521970ce781dc53 100644
--- a/src/MNH/spawning.f90
+++ b/src/MNH/spawning.f90
@@ -109,6 +109,7 @@ USE MODD_PARAM_n
 USE MODD_REF_n
 USE MODD_TIME_n
 USE MODD_CH_MNHC_n
+USE MODD_GRID_n
 ! 
 USE MODE_IO_ll
 USE MODE_ll
@@ -271,6 +272,8 @@ XZS1 => XZS
 XZSMT1 => XZSMT
 XZZ1 => XZZ
 LSLEVE1 => LSLEVE
+XLEN11 => XLEN1
+XLEN21 => XLEN2
 XACPRR1 => XACPRR
 XTHT1 => XTHT
 XUT1 => XUT
diff --git a/src/MNH/write_lfin.f90 b/src/MNH/write_lfin.f90
index a60fe02f31edf92c84b0214421e3683cb9365493..c6236e57e18dfdbd11df5a5199c21acb83cb1526 100644
--- a/src/MNH/write_lfin.f90
+++ b/src/MNH/write_lfin.f90
@@ -434,19 +434,8 @@ CALL IO_WRITE_FIELD(TPFILE,'ZSMT', CLUOUT,IRESP,XZSMT)
 CALL IO_WRITE_FIELD(TPFILE,'SLEVE',CLUOUT,IRESP,LSLEVE)
 !
 IF (LSLEVE) THEN
-  YRECFM='LEN1'
-  YDIR='--'
-  YCOMMENT=''
-  IGRID=4
-  ILENCH=LEN(YCOMMENT)
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XLEN1,IGRID,ILENCH,YCOMMENT,IRESP)
-  !
-  YRECFM='LEN2'
-  YDIR='--'
-  YCOMMENT=''
-  IGRID=4
-  ILENCH=LEN(YCOMMENT)
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XLEN2,IGRID,ILENCH,YCOMMENT,IRESP)
+  CALL IO_WRITE_FIELD(TPFILE,'LEN1',CLUOUT,IRESP,XLEN1)
+  CALL IO_WRITE_FIELD(TPFILE,'LEN2',CLUOUT,IRESP,XLEN2)
 END IF
 !
 YDIR='--'