From 8aa8478cbbe72586b9c8ab638529b43db8b35886 Mon Sep 17 00:00:00 2001
From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Date: Mon, 23 Jan 2017 10:29:00 +0100
Subject: [PATCH] Philippe 23/01/2017: added several variables to TFIELDLIST

---
 src/LIB/SURCOUCHE/src/mode_field.f90 | 506 ++++++++++++++++++++++++++-
 src/MNH/modd_fieldn.f90              |  20 +-
 src/MNH/modd_gridn.f90               |  57 +--
 src/MNH/modd_ref.f90                 |   4 +-
 src/MNH/modd_spawn.f90               |   7 +
 src/MNH/spawn_grid2.f90              |  51 +--
 src/MNH/spawn_pressure2.f90          |   4 +-
 src/MNH/spawning.f90                 |   8 +
 src/MNH/write_lfin.f90               | 226 +++---------
 9 files changed, 630 insertions(+), 253 deletions(-)

diff --git a/src/LIB/SURCOUCHE/src/mode_field.f90 b/src/LIB/SURCOUCHE/src/mode_field.f90
index b73202083..b63043c96 100644
--- a/src/LIB/SURCOUCHE/src/mode_field.f90
+++ b/src/LIB/SURCOUCHE/src/mode_field.f90
@@ -4,6 +4,7 @@
 !MNH_LIC for details. version 1.
 MODULE MODE_FIELD
 !
+USE MODD_CONF, ONLY : CPROGRAM
 USE MODD_PARAMETERS
 !
 IMPLICIT NONE
@@ -11,6 +12,10 @@ IMPLICIT NONE
 INTEGER,PRIVATE,PARAMETER :: MAXFIELDS = 100
 INTEGER,PARAMETER :: TYPEUNDEF = -1, TYPEINT = 1, TYPELOG = 2, TYPEREAL = 3, TYPECHAR = 4
 !
+TYPE TFIELDPTR_L0D
+  LOGICAL,              POINTER :: DATA => NULL()
+END TYPE TFIELDPTR_L0D
+!
 TYPE TFIELDPTR_X1D
   REAL,DIMENSION(:),    POINTER :: DATA => NULL()
 END TYPE TFIELDPTR_X1D
@@ -34,6 +39,9 @@ TYPE TFIELDDATA
   INTEGER            :: NGRID     = -1 !Localization on the model grid
   INTEGER            :: NTYPE     = TYPEUNDEF !Datatype
   INTEGER            :: NDIMS     = 0  !Number of dimensions
+  !
+  TYPE(TFIELDPTR_L0D),DIMENSION(:),ALLOCATABLE :: TFIELD_L0D !Pointer to the scalar logical 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)
@@ -46,7 +54,7 @@ CONTAINS
 !
 SUBROUTINE INI_FIELD_LIST(KMODEL)
 !
-USE MODD_CONF, ONLY: NMODEL
+USE MODD_CONF, ONLY: LCARTESIAN,NMODEL
 !
 INTEGER,INTENT(IN),OPTIONAL :: KMODEL
 !
@@ -73,6 +81,7 @@ END IF
 !
 IDX = 1
 !
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
 TFIELDLIST(IDX)%CMNHNAME   = 'MASDEV'
 TFIELDLIST(IDX)%CSTDNAME   = ''
 TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH version (without bugfix)'
@@ -84,6 +93,7 @@ TFIELDLIST(IDX)%NTYPE      = TYPEINT
 TFIELDLIST(IDX)%NDIMS      = 0
 IDX = IDX+1
 !
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
 TFIELDLIST(IDX)%CMNHNAME   = 'BUGFIX'
 TFIELDLIST(IDX)%CSTDNAME   = ''
 TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH bugfix number'
@@ -95,6 +105,7 @@ TFIELDLIST(IDX)%NTYPE      = TYPEINT
 TFIELDLIST(IDX)%NDIMS      = 0
 IDX = IDX+1
 !
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
 TFIELDLIST(IDX)%CMNHNAME   = 'BIBUSER'
 TFIELDLIST(IDX)%CSTDNAME   = ''
 TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: user binary library'
@@ -106,6 +117,7 @@ TFIELDLIST(IDX)%NTYPE      = TYPECHAR
 TFIELDLIST(IDX)%NDIMS      = 1
 IDX = IDX+1
 !
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
 TFIELDLIST(IDX)%CMNHNAME   = 'PROGRAM'
 TFIELDLIST(IDX)%CSTDNAME   = ''
 TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH family: used program'
@@ -117,6 +129,7 @@ TFIELDLIST(IDX)%NTYPE      = TYPECHAR
 TFIELDLIST(IDX)%NDIMS      = 1
 IDX = IDX+1
 !
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
 TFIELDLIST(IDX)%CMNHNAME   = 'FILETYPE'
 TFIELDLIST(IDX)%CSTDNAME   = ''
 TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: type of this file'
@@ -128,6 +141,7 @@ TFIELDLIST(IDX)%NTYPE      = TYPECHAR
 TFIELDLIST(IDX)%NDIMS      = 1
 IDX = IDX+1
 !
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
 TFIELDLIST(IDX)%CMNHNAME   = 'MY_NAME'
 TFIELDLIST(IDX)%CSTDNAME   = ''
 TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: filename (no extension)'
@@ -139,6 +153,7 @@ TFIELDLIST(IDX)%NTYPE      = TYPECHAR
 TFIELDLIST(IDX)%NDIMS      = 1
 IDX = IDX+1
 !
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
 TFIELDLIST(IDX)%CMNHNAME   = 'DAD_NAME'
 TFIELDLIST(IDX)%CSTDNAME   = ''
 TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: filename of the dad file'
@@ -150,6 +165,7 @@ TFIELDLIST(IDX)%NTYPE      = TYPECHAR
 TFIELDLIST(IDX)%NDIMS      = 1
 IDX = IDX+1
 !
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
 TFIELDLIST(IDX)%CMNHNAME   = 'DXRATIO'
 TFIELDLIST(IDX)%CSTDNAME   = ''
 TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: DXRATIO'
@@ -161,6 +177,7 @@ TFIELDLIST(IDX)%NTYPE      = TYPEINT
 TFIELDLIST(IDX)%NDIMS      = 0
 IDX = IDX+1
 !
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
 TFIELDLIST(IDX)%CMNHNAME   = 'DYRATIO'
 TFIELDLIST(IDX)%CSTDNAME   = ''
 TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: DYRATIO'
@@ -172,6 +189,7 @@ TFIELDLIST(IDX)%NTYPE      = TYPEINT
 TFIELDLIST(IDX)%NDIMS      = 0
 IDX = IDX+1
 !
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
 TFIELDLIST(IDX)%CMNHNAME   = 'XOR'
 TFIELDLIST(IDX)%CSTDNAME   = ''
 TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: XOR'
@@ -183,6 +201,7 @@ TFIELDLIST(IDX)%NTYPE      = TYPEINT
 TFIELDLIST(IDX)%NDIMS      = 0
 IDX = IDX+1
 !
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
 TFIELDLIST(IDX)%CMNHNAME   = 'YOR'
 TFIELDLIST(IDX)%CSTDNAME   = ''
 TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: YOR'
@@ -194,9 +213,286 @@ TFIELDLIST(IDX)%NTYPE      = TYPEINT
 TFIELDLIST(IDX)%NDIMS      = 0
 IDX = IDX+1
 !
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'STORAGE_TYPE'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: STORAGE_TYPE'
+TFIELDLIST(IDX)%CUNITS     = ''
+TFIELDLIST(IDX)%CDIR       = '--'
+TFIELDLIST(IDX)%CCOMMENT   = 'Storage type for the information written in the FM files'
+TFIELDLIST(IDX)%NGRID      = 0
+TFIELDLIST(IDX)%NTYPE      = TYPECHAR
+TFIELDLIST(IDX)%NDIMS      = 1
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'IMAX'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: IMAX'
+TFIELDLIST(IDX)%CUNITS     = ''
+TFIELDLIST(IDX)%CDIR       = '--'
+TFIELDLIST(IDX)%CCOMMENT   = 'x-dimension of the physical domain'
+TFIELDLIST(IDX)%NGRID      = 0
+TFIELDLIST(IDX)%NTYPE      = TYPEINT
+TFIELDLIST(IDX)%NDIMS      = 0
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'JMAX'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: JMAX'
+TFIELDLIST(IDX)%CUNITS     = ''
+TFIELDLIST(IDX)%CDIR       = '--'
+TFIELDLIST(IDX)%CCOMMENT   = 'y-dimension of the physical domain'
+TFIELDLIST(IDX)%NGRID      = 0
+TFIELDLIST(IDX)%NTYPE      = TYPEINT
+TFIELDLIST(IDX)%NDIMS      = 0
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'KMAX'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: KMAX'
+TFIELDLIST(IDX)%CUNITS     = ''
+TFIELDLIST(IDX)%CDIR       = '--'
+TFIELDLIST(IDX)%CCOMMENT   = 'z-dimension of the physical domain'
+TFIELDLIST(IDX)%NGRID      = 0
+TFIELDLIST(IDX)%NTYPE      = TYPEINT
+TFIELDLIST(IDX)%NDIMS      = 0
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'JPHEXT'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: JPHEXT'
+TFIELDLIST(IDX)%CUNITS     = ''
+TFIELDLIST(IDX)%CDIR       = '--'
+TFIELDLIST(IDX)%CCOMMENT   = 'Number of horizontal external points on each side'
+TFIELDLIST(IDX)%NGRID      = 0
+TFIELDLIST(IDX)%NTYPE      = TYPEINT
+TFIELDLIST(IDX)%NDIMS      = 0
+IDX = IDX+1
+!
+!
+IF (.NOT.LCARTESIAN) THEN
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'RPK'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: RPK'
+TFIELDLIST(IDX)%CUNITS     = ''
+TFIELDLIST(IDX)%CDIR       = '--'
+TFIELDLIST(IDX)%CCOMMENT   = 'Projection parameter for conformal projection'
+TFIELDLIST(IDX)%NGRID      = 0
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 0
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'LONORI'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: LONORI'
+TFIELDLIST(IDX)%CUNITS     = 'degree'
+TFIELDLIST(IDX)%CDIR       = '--'
+TFIELDLIST(IDX)%CCOMMENT   = 'Longitude of the point of coordinates x=0, y=0 for conformal projection'
+TFIELDLIST(IDX)%NGRID      = 0
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 0
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'LATORI'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: LATORI'
+TFIELDLIST(IDX)%CUNITS     = 'degree'
+TFIELDLIST(IDX)%CDIR       = '--'
+TFIELDLIST(IDX)%CCOMMENT   = 'Latitude of the point of coordinates x=0, y=0 for conformal projection'
+TFIELDLIST(IDX)%NGRID      = 0
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 0
+IDX = IDX+1
+!
+END IF
+!
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'THINSHELL'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: THINSHELL'
+TFIELDLIST(IDX)%CUNITS     = ''
+TFIELDLIST(IDX)%CDIR       = '--'
+TFIELDLIST(IDX)%CCOMMENT   = 'Logical for thinshell approximation'
+TFIELDLIST(IDX)%NGRID      = 0
+TFIELDLIST(IDX)%NTYPE      = TYPELOG
+TFIELDLIST(IDX)%NDIMS      = 0
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'LAT0'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: LAT0'
+TFIELDLIST(IDX)%CUNITS     = 'degree'
+TFIELDLIST(IDX)%CDIR       = '--'
+TFIELDLIST(IDX)%CCOMMENT   = 'Reference latitude for conformal projection'
+TFIELDLIST(IDX)%NGRID      = 0
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 0
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'LON0'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: LON0'
+TFIELDLIST(IDX)%CUNITS     = 'degree'
+TFIELDLIST(IDX)%CDIR       = '--'
+TFIELDLIST(IDX)%CCOMMENT   = 'Reference longitude for conformal projection'
+TFIELDLIST(IDX)%NGRID      = 0
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 0
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'BETA'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: BETA'
+TFIELDLIST(IDX)%CUNITS     = 'degree'
+TFIELDLIST(IDX)%CDIR       = '--'
+TFIELDLIST(IDX)%CCOMMENT   = 'Rotation angle for conformal projection'
+TFIELDLIST(IDX)%NGRID      = 0
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 0
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'XHAT'
+!TODO: check stdname
+TFIELDLIST(IDX)%CSTDNAME   = 'projection_x_coordinate'
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: XHAT'
+TFIELDLIST(IDX)%CUNITS     = 'm'
+TFIELDLIST(IDX)%CDIR       = 'XX'
+TFIELDLIST(IDX)%CCOMMENT   = 'Position x in the conformal or cartesian plane'
+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   = 'YHAT'
+!TODO: check stdname
+TFIELDLIST(IDX)%CSTDNAME   = 'projection_y_coordinate'
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: YHAT'
+TFIELDLIST(IDX)%CUNITS     = 'm'
+TFIELDLIST(IDX)%CDIR       = 'YY'
+TFIELDLIST(IDX)%CCOMMENT   = 'Position y in the conformal or cartesian plane'
+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   = 'ZHAT'
+!TODO: check stdname
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: ZHAT'
+TFIELDLIST(IDX)%CUNITS     = 'm'
+TFIELDLIST(IDX)%CDIR       = '--'
+TFIELDLIST(IDX)%CCOMMENT   = 'Height level without orography'
+TFIELDLIST(IDX)%NGRID      = 4
+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'
+TFIELDLIST(IDX)%CUNITS     = 'm'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_Z_ALTitude'
+TFIELDLIST(IDX)%NGRID      = 4
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 3
+ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL))
+IDX = IDX+1
+!
+!
+IF (.NOT.LCARTESIAN) THEN
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'LAT'
+TFIELDLIST(IDX)%CSTDNAME   = 'latitude'
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: LAT'
+TFIELDLIST(IDX)%CUNITS     = 'degree_north'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_latitude'
+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   = 'LON'
+TFIELDLIST(IDX)%CSTDNAME   = 'longitude'
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: LON'
+TFIELDLIST(IDX)%CUNITS     = 'degree_east'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_longitude'
+TFIELDLIST(IDX)%NGRID      = 1
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 2
+ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL))
+IDX = IDX+1
+!
+END IF
+!
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'ZS'
+TFIELDLIST(IDX)%CSTDNAME   = 'ground_level_altitude'
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: ZS'
+TFIELDLIST(IDX)%CUNITS     = 'm'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'orography'
+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   = 'ZSMT'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: ZSMT'
+TFIELDLIST(IDX)%CUNITS     = 'm'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'smooth orography'
+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   = 'SLEVE'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: SLEVE'
+TFIELDLIST(IDX)%CUNITS     = ''
+TFIELDLIST(IDX)%CDIR       = '--'
+TFIELDLIST(IDX)%CCOMMENT   = 'Logical for SLEVE coordinate'
+TFIELDLIST(IDX)%NGRID      = 4
+TFIELDLIST(IDX)%NTYPE      = TYPELOG
+TFIELDLIST(IDX)%NDIMS      = 0
+ALLOCATE(TFIELDLIST(IDX)%TFIELD_L0D(IMODEL))
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
 TFIELDLIST(IDX)%CMNHNAME   = 'UT'
 TFIELDLIST(IDX)%CSTDNAME   = 'x_wind'
-TFIELDLIST(IDX)%CLONGNAME  = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: UT'
 TFIELDLIST(IDX)%CUNITS     = 'm s-1'
 TFIELDLIST(IDX)%CDIR       = 'XY'
 TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_Z_U component of wind (m/s)'
@@ -206,9 +502,10 @@ TFIELDLIST(IDX)%NDIMS      = 3
 ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL))
 IDX = IDX+1
 !
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
 TFIELDLIST(IDX)%CMNHNAME   = 'VT'
 TFIELDLIST(IDX)%CSTDNAME   = 'y_wind'
-TFIELDLIST(IDX)%CLONGNAME  = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: VT'
 TFIELDLIST(IDX)%CUNITS     = 'm s-1'
 TFIELDLIST(IDX)%CDIR       = 'XY'
 TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_Z_V component of wind (m/s)'
@@ -218,9 +515,10 @@ TFIELDLIST(IDX)%NDIMS      = 3
 ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL))
 IDX = IDX+1
 !
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
 TFIELDLIST(IDX)%CMNHNAME   = 'WT'
 TFIELDLIST(IDX)%CSTDNAME   = 'upward_air_velocity'
-TFIELDLIST(IDX)%CLONGNAME  = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: WT'
 TFIELDLIST(IDX)%CUNITS     = 'm s-1'
 TFIELDLIST(IDX)%CDIR       = 'XY'
 TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_Z_vertical wind (m/s)'
@@ -230,9 +528,10 @@ TFIELDLIST(IDX)%NDIMS      = 3
 ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL))
 IDX = IDX+1
 !
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
 TFIELDLIST(IDX)%CMNHNAME   = 'THT'
 TFIELDLIST(IDX)%CSTDNAME   = 'air_potential_temperature'
-TFIELDLIST(IDX)%CLONGNAME  = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: THT'
 TFIELDLIST(IDX)%CUNITS     = 'K'
 TFIELDLIST(IDX)%CDIR       = 'XY'
 TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_Z_potential temperature (K)'
@@ -242,9 +541,110 @@ TFIELDLIST(IDX)%NDIMS      = 3
 ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL))
 IDX = IDX+1
 !
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'RHOREFZ'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: RHOREFZ'
+TFIELDLIST(IDX)%CUNITS     = 'kg m-3'
+TFIELDLIST(IDX)%CDIR       = '--'
+TFIELDLIST(IDX)%CCOMMENT   = 'rhodz for reference state without orography'
+TFIELDLIST(IDX)%NGRID      = 4
+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   = 'THVREFZ'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: THVREFZ'
+TFIELDLIST(IDX)%CUNITS     = 'K'
+TFIELDLIST(IDX)%CDIR       = '--'
+TFIELDLIST(IDX)%CCOMMENT   = 'thetavz for reference state without orography'
+TFIELDLIST(IDX)%NGRID      = 4
+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   = 'EXNTOP'
+TFIELDLIST(IDX)%CSTDNAME   = 'dimensionless_exner_function'
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: EXNTOP'
+TFIELDLIST(IDX)%CUNITS     = ''
+TFIELDLIST(IDX)%CDIR       = '--'
+TFIELDLIST(IDX)%CCOMMENT   = 'Exner function at model top'
+TFIELDLIST(IDX)%NGRID      = 4
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 0
+IDX = IDX+1
+!
+!
+IF (CPROGRAM == 'MESONH') THEN
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'US_PRES'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: US_PRES'
+!TODO: units?
+TFIELDLIST(IDX)%CUNITS     = ''
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_Z_US_PRES'
+TFIELDLIST(IDX)%NGRID      = 2
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 3
+ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL))
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'VS_PRES'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: VS_PRES'
+!TODO: units?
+TFIELDLIST(IDX)%CUNITS     = ''
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_Z_VS_PRES'
+TFIELDLIST(IDX)%NGRID      = 3
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 3
+ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL))
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'WS_PRES'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: WS_PRES'
+!TODO: units?
+TFIELDLIST(IDX)%CUNITS     = ''
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_Z_US_PRES'
+TFIELDLIST(IDX)%NGRID      = 4
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 3
+ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL))
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'THS_CLD'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: THS_CLD'
+!TODO: units?
+TFIELDLIST(IDX)%CUNITS     = ''
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_Z_THS_CLD'
+TFIELDLIST(IDX)%NGRID      = 1
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 3
+ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL))
+IDX = IDX+1
+!
+END IF
+!
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
 TFIELDLIST(IDX)%CMNHNAME   = 'ACPRR'
 TFIELDLIST(IDX)%CSTDNAME   = 'rainfall_amount'
-TFIELDLIST(IDX)%CLONGNAME  = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: ACPRR'
 !PW: TODO: CF-convention prefers 'kg m-2'
 TFIELDLIST(IDX)%CUNITS     = 'm'
 TFIELDLIST(IDX)%CDIR       = ''
@@ -259,9 +659,10 @@ PRINT *,'INFO: INI_FIELD_LIST: number of used fields=',IDX-1,' out of ',MAXFIELD
 !
 #if 0
 !
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
 TFIELDLIST(IDX)%CMNHNAME   = ''
 TFIELDLIST(IDX)%CSTDNAME   = ''
-TFIELDLIST(IDX)%CLONGNAME  = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: '
 TFIELDLIST(IDX)%CUNITS     = ''
 TFIELDLIST(IDX)%CDIR       = ''
 TFIELDLIST(IDX)%CCOMMENT   = ''
@@ -271,7 +672,13 @@ TFIELDLIST(IDX)%NDIMS      =
 ALLOCATE(TFIELDLIST(IDX)%TFIELD_xxxD(IMODEL))
 IDX = IDX+1
 #endif
-
+!
+CONTAINS
+SUBROUTINE ERR_INI_FIELD_LIST()
+  PRINT *,'FATAL: INI_FIELD_LIST: IDX>MAXFIELDS (',MAXFIELDS,')'
+  STOP
+END SUBROUTINE ERR_INI_FIELD_LIST
+!
 END SUBROUTINE INI_FIELD_LIST
 !
 SUBROUTINE FIND_FIELD_ID_FROM_MNHNAME(HMNHNAME,KID,KRESP)
@@ -325,7 +732,10 @@ END SUBROUTINE FIND_FIELD_ID_FROM_MNHNAME
 !
 SUBROUTINE FIELDLIST_GOTO_MODEL(KFROM, KTO)
 !
+USE MODD_REF
+!
 USE MODD_FIELD_n
+USE MODD_GRID_n
 USE MODD_PRECIP_n
 !
 INTEGER, INTENT(IN) :: KFROM, KTO
@@ -349,6 +759,32 @@ IF (.NOT.LFIELDLIST_ISINIT) THEN
   RETURN
 END IF
 !
+! Initialize some pointers
+!
+IF (KFROM == KTO) THEN
+  IF (.NOT.ALLOCATED(XRHODREFZ)) THEN
+    PRINT *,'FATAL: INI_FIELD_LIST: XRHODREFZ not yet allocated'
+    STOP
+  END IF
+  CALL FIND_FIELD_ID_FROM_MNHNAME('RHOREFZ',IID,IRESP)
+  TFIELDLIST(IID)%TFIELD_X1D(KFROM)%DATA=>XRHODREFZ
+  !
+  IF (.NOT.ALLOCATED(XTHVREFZ)) THEN
+    PRINT *,'FATAL: INI_FIELD_LIST: XTHVREFZ not yet allocated'
+    STOP
+  END IF
+  CALL FIND_FIELD_ID_FROM_MNHNAME('THVREFZ',IID,IRESP)
+  TFIELDLIST(IID)%TFIELD_X1D(KFROM)%DATA=>XTHVREFZ
+  !
+  IF (.NOT.ASSOCIATED(LSLEVE)) THEN
+    PRINT *,'FATAL: INI_FIELD_LIST: LSLEVE not yet associated'
+    STOP
+  END IF
+  CALL FIND_FIELD_ID_FROM_MNHNAME('SLEVE',IID,IRESP)
+  TFIELDLIST(IID)%TFIELD_L0D(KFROM)%DATA=>LSLEVE
+  !
+END IF
+!
 ! Save current state for allocated arrays
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME('UT',IID,IRESP)
@@ -359,6 +795,32 @@ 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
+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
 !
@@ -373,6 +835,34 @@ 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
+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
+CALL FIND_FIELD_ID_FROM_MNHNAME('SLEVE',IID,IRESP)
+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
 END IF
diff --git a/src/MNH/modd_fieldn.f90 b/src/MNH/modd_fieldn.f90
index 4e15f456f..82a544c66 100644
--- a/src/MNH/modd_fieldn.f90
+++ b/src/MNH/modd_fieldn.f90
@@ -67,10 +67,10 @@ TYPE FIELD_t
                                       ! U,V,W  at time t
   REAL, DIMENSION(:,:,:), POINTER :: XRUS=>NULL(),XRVS=>NULL(),XRWS=>NULL()
                                       ! Source of (rho U), (rho V), (rho w) 
-  REAL, DIMENSION(:,:,:), POINTER :: XRUS_PRES=>NULL(),XRVS_PRES=>NULL(),XRWS_PRES=>NULL()
+!  REAL, DIMENSION(:,:,:), POINTER :: XRUS_PRES=>NULL(),XRVS_PRES=>NULL(),XRWS_PRES=>NULL()
 !  REAL, DIMENSION(:,:,:), POINTER :: XTHT=>NULL()     ! (rho theta) at time t
   REAL, DIMENSION(:,:,:), POINTER :: XRTHS=>NULL()    ! Source of (rho theta)
-  REAL, DIMENSION(:,:,:), POINTER :: XRTHS_CLD=>NULL()    ! Source of (rho theta) from resolved_cloud
+!  REAL, DIMENSION(:,:,:), POINTER :: XRTHS_CLD=>NULL()    ! Source of (rho theta) from resolved_cloud
   REAL, DIMENSION(:,:,:), POINTER :: XSUPSAT=>NULL()    ! Sursat
                                                      ! at time t
   REAL, DIMENSION(:,:,:), POINTER :: XNACT=>NULL()    ! Sursat
@@ -157,12 +157,12 @@ INTEGER :: IID,IRESP
 FIELD_MODEL(KFROM)%XRUS=>XRUS
 FIELD_MODEL(KFROM)%XRVS=>XRVS
 FIELD_MODEL(KFROM)%XRWS=>XRWS
-FIELD_MODEL(KFROM)%XRUS_PRES=>XRUS_PRES
-FIELD_MODEL(KFROM)%XRVS_PRES=>XRVS_PRES
-FIELD_MODEL(KFROM)%XRWS_PRES=>XRWS_PRES
+!FIELD_MODEL(KFROM)%XRUS_PRES=>XRUS_PRES !Done in FIELDLIST_GOTO_MODEL
+!FIELD_MODEL(KFROM)%XRVS_PRES=>XRVS_PRES !Done in FIELDLIST_GOTO_MODEL
+!FIELD_MODEL(KFROM)%XRWS_PRES=>XRWS_PRES !Done in FIELDLIST_GOTO_MODEL
 !FIELD_MODEL(KFROM)%XTHT=>XTHT !Done in FIELDLIST_GOTO_MODEL
 FIELD_MODEL(KFROM)%XRTHS=>XRTHS
-FIELD_MODEL(KFROM)%XRTHS_CLD=>XRTHS_CLD
+!FIELD_MODEL(KFROM)%XRTHS_CLD=>XRTHS_CLD !Done in FIELDLIST_GOTO_MODEL
 FIELD_MODEL(KFROM)%XSUPSAT=>XSUPSAT
 FIELD_MODEL(KFROM)%XNACT=>XNACT
 FIELD_MODEL(KFROM)%XNPRO=>XNPRO
@@ -192,12 +192,12 @@ FIELD_MODEL(KFROM)%XRCM=>XRCM
 XRUS=>FIELD_MODEL(KTO)%XRUS
 XRVS=>FIELD_MODEL(KTO)%XRVS
 XRWS=>FIELD_MODEL(KTO)%XRWS
-XRUS_PRES=>FIELD_MODEL(KTO)%XRUS_PRES
-XRVS_PRES=>FIELD_MODEL(KTO)%XRVS_PRES
-XRWS_PRES=>FIELD_MODEL(KTO)%XRWS_PRES
+!XRUS_PRES=>FIELD_MODEL(KTO)%XRUS_PRES !Done in FIELDLIST_GOTO_MODEL
+!XRVS_PRES=>FIELD_MODEL(KTO)%XRVS_PRES !Done in FIELDLIST_GOTO_MODEL
+!XRWS_PRES=>FIELD_MODEL(KTO)%XRWS_PRES !Done in FIELDLIST_GOTO_MODEL
 !XTHT=>FIELD_MODEL(KTO)%XTHT !Done in FIELDLIST_GOTO_MODEL
 XRTHS=>FIELD_MODEL(KTO)%XRTHS
-XRTHS_CLD=>FIELD_MODEL(KTO)%XRTHS_CLD
+!XRTHS_CLD=>FIELD_MODEL(KTO)%XRTHS_CLD !Done in FIELDLIST_GOTO_MODEL
 XSUPSAT=>FIELD_MODEL(KTO)%XSUPSAT
 XNACT=>FIELD_MODEL(KTO)%XNACT
 XSSPRO=>FIELD_MODEL(KTO)%XSSPRO
diff --git a/src/MNH/modd_gridn.f90 b/src/MNH/modd_gridn.f90
index b44a4ac05..ad6b44aae 100644
--- a/src/MNH/modd_gridn.f90
+++ b/src/MNH/modd_gridn.f90
@@ -49,19 +49,19 @@ USE MODD_PARAMETERS, ONLY: JPMODELMAX
 IMPLICIT NONE
 
 TYPE GRID_t
-  REAL, DIMENSION(:,:), POINTER :: XLON=>NULL(),XLAT=>NULL() ! Longitude and latitude  
+!  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 :: 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 :: 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 
@@ -72,10 +72,10 @@ TYPE GRID_t
   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
+!  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
+!  REAL, DIMENSION(:,:),   POINTER :: XZSMT=>NULL()   ! smooth orography for SLEVE coordinate
 END TYPE GRID_t
 
 TYPE(GRID_t), DIMENSION(JPMODELMAX), TARGET, SAVE :: GRID_MODEL
@@ -100,46 +100,49 @@ 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
-GRID_MODEL(KFROM)%XLAT=>XLAT
-GRID_MODEL(KFROM)%XXHAT=>XXHAT
-GRID_MODEL(KFROM)%XYHAT=>XYHAT
+!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
-GRID_MODEL(KFROM)%XZZ=>XZZ
-GRID_MODEL(KFROM)%XZHAT=>XZHAT
+!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
+!GRID_MODEL(KFROM)%XZSMT=>XZSMT !Done in FIELDLIST_GOTO_MODEL
 !
 ! Current model is set to model KTO
-XLON=>GRID_MODEL(KTO)%XLON
-XLAT=>GRID_MODEL(KTO)%XLAT
-XXHAT=>GRID_MODEL(KTO)%XXHAT
-XYHAT=>GRID_MODEL(KTO)%XYHAT
+!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
-XZZ=>GRID_MODEL(KTO)%XZZ
-XZHAT=>GRID_MODEL(KTO)%XZHAT
+!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
+!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
+!XZSMT=>GRID_MODEL(KTO)%XZSMT !Done in FIELDLIST_GOTO_MODEL
+
+IF (.NOT.ASSOCIATED(LSLEVE)) ALLOCATE(LSLEVE)
 
 END SUBROUTINE GRID_GOTO_MODEL
 
diff --git a/src/MNH/modd_ref.f90 b/src/MNH/modd_ref.f90
index e7b396101..b2605f1c1 100644
--- a/src/MNH/modd_ref.f90
+++ b/src/MNH/modd_ref.f90
@@ -45,9 +45,9 @@
 !
 IMPLICIT NONE
 !          
-REAL,SAVE, DIMENSION(:), ALLOCATABLE :: XRHODREFZ ! rhod(z) for reference
+REAL,SAVE, DIMENSION(:), ALLOCATABLE, TARGET :: XRHODREFZ ! rhod(z) for reference
                                              ! state without orography
-REAL,SAVE, DIMENSION(:), ALLOCATABLE :: XTHVREFZ  ! Thetav(z) for reference
+REAL,SAVE, DIMENSION(:), ALLOCATABLE, TARGET :: XTHVREFZ  ! Thetav(z) for reference
                                              ! state without orography    
 REAL,SAVE                            :: XEXNTOP   ! Exner function at model top 
 LOGICAL, SAVE                        :: LBOUSS    ! Boussinesq approximation
diff --git a/src/MNH/modd_spawn.f90 b/src/MNH/modd_spawn.f90
index 4edb589ff..0d8e13504 100644
--- a/src/MNH/modd_spawn.f90
+++ b/src/MNH/modd_spawn.f90
@@ -64,6 +64,13 @@ CHARACTER (LEN=28) :: CDADSPAFILE ! DAD fm-file for spawning file
                                     ! if LBAL_ONLY=T
 !
 ! Pointers to the data of the mesh #1
+REAL,DIMENSION(:),    SAVE,POINTER :: XXHAT1
+REAL,DIMENSION(:),    SAVE,POINTER :: XYHAT1
+REAL,DIMENSION(:),    SAVE,POINTER :: XZHAT1
+REAL,DIMENSION(:,:),  SAVE,POINTER :: XZS1
+REAL,DIMENSION(:,:),  SAVE,POINTER :: XZSMT1
+REAL,DIMENSION(:,:,:),SAVE,POINTER :: XZZ1
+LOGICAL,              SAVE,POINTER :: LSLEVE1
 REAL,DIMENSION(:,:),  SAVE,POINTER :: XACPRR1
 REAL,DIMENSION(:,:,:),SAVE,POINTER :: XTHT1
 REAL,DIMENSION(:,:,:),SAVE,POINTER :: XUT1
diff --git a/src/MNH/spawn_grid2.f90 b/src/MNH/spawn_grid2.f90
index 3fa646362..34920a8bc 100644
--- a/src/MNH/spawn_grid2.f90
+++ b/src/MNH/spawn_grid2.f90
@@ -142,7 +142,7 @@ END MODULE MODI_SPAWN_GRID2
 !!      Modification 20/04/99 (J. Stein) bug on the last point if the whole
 !!                             domain is used (2D case along y for instance
 !!      Modification 15/03/99 (V.Masson) cover types
-!!      Modification 04/07/01 (J.Stein)  convergence test set to 1 millimeter for GRID_MODEL(1)%XZS
+!!      Modification 04/07/01 (J.Stein)  convergence test set to 1 millimeter for XZS1
 !!      Modification 05/09/05 (J. Escobar) change INTENT(OUT) --> INTENT(INOUT)
 !!                             to avoid problem when Input parameter and GRID1 parameter
 !!                             are exactly the same !!!
@@ -157,6 +157,7 @@ END MODULE MODI_SPAWN_GRID2
 !
 USE MODD_PARAMETERS       ! Declarative modules
 USE MODD_CONF
+USE MODD_SPAWN
 !
 USE MODD_GRID, ONLY: XLONORI,XLATORI 
 USE MODD_GRID_n,    ONLY: GRID_MODEL
@@ -285,19 +286,19 @@ ENDIF
 CALL FMLOOK_ll(CLUOUT,CLUOUT,ILUOUT,IRESP)
 !
 !*       1.3  checks that model 2 domain is included in the one of model 1
-IF ( (IXEND_F) > SIZE(GRID_MODEL(1)%XXHAT) )  THEN   
+IF ( (IXEND_F) > SIZE(XXHAT1) )  THEN   
   WRITE(ILUOUT,FMT=*) 'SPAWN_MODEL2:  MODEL 2 DOMAIN OUTSIDE THE MODEL1 DOMAIN  ',  &
                   ' IXOR_F = ', IXOR_F,' IXEND_F = ', IXEND_F,                      &
-                  ' IIU of model1 = ',SIZE(GRID_MODEL(1)%XXHAT)
+                  ' IIU of model1 = ',SIZE(XXHAT1)
  !callabortstop
   CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
   CALL ABORT
   STOP
 END IF 
-IF ( (IYEND_F) > SIZE(GRID_MODEL(1)%XYHAT) )  THEN  
+IF ( (IYEND_F) > SIZE(XYHAT1) )  THEN  
   WRITE(ILUOUT,FMT=*) 'SPAWN_MODEL2:  MODEL 2 DOMAIN OUTSIDE THE MODEL1 DOMAIN  ',  &
                   ' IYOR_F = ', IYOR_F,' IYEND_F = ', IYEND_F,                  &
-                  ' IJU of model1 = ',SIZE(GRID_MODEL(1)%XYHAT)
+                  ' IJU of model1 = ',SIZE(XYHAT1)
  !callabortstop
   CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
   CALL ABORT
@@ -309,8 +310,8 @@ END IF
 !*       2.    INITIALIZATION OF THE GRID OF MODEL 2:
 !              --------------------------------------
 !
-PZHAT(:) = GRID_MODEL(1)%XZHAT(:) 
-OSLEVE   = GRID_MODEL(1)%LSLEVE
+PZHAT(:) = XZHAT1(:) 
+OSLEVE   = LSLEVE1
 PLEN1    = GRID_MODEL(1)%XLEN1
 PLEN2    = GRID_MODEL(1)%XLEN2
 !
@@ -318,12 +319,12 @@ IF (KDXRATIO == 1 .AND. KDYRATIO == 1 ) THEN
 !
 !*       2.1   special case of spawning - no change of resolution :
 !$ in our case we don't get them here !
-  PXHAT(:) = GRID_MODEL(1)%XXHAT(KXOR:KXEND)
-  PYHAT(:) = GRID_MODEL(1)%XYHAT(KYOR:KYEND)
-  PZS  (:,:) = GRID_MODEL(1)%XZS  (KXOR:KXEND,KYOR:KYEND)
-  PZS_LS(:,:)= GRID_MODEL(1)%XZS  (KXOR:KXEND,KYOR:KYEND)
-  PZSMT   (:,:) = GRID_MODEL(1)%XZSMT(KXOR:KXEND,KYOR:KYEND)
-  PZSMT_LS(:,:) = GRID_MODEL(1)%XZSMT(KXOR:KXEND,KYOR:KYEND)
+  PXHAT(:) = XXHAT1(KXOR:KXEND)
+  PYHAT(:) = XYHAT1(KYOR:KYEND)
+  PZS  (:,:) = XZS1  (KXOR:KXEND,KYOR:KYEND)
+  PZS_LS(:,:)= XZS1  (KXOR:KXEND,KYOR:KYEND)
+  PZSMT   (:,:) = XZSMT1(KXOR:KXEND,KYOR:KYEND)
+  PZSMT_LS(:,:) = XZSMT1(KXOR:KXEND,KYOR:KYEND)
 !
 ELSE
 !
@@ -336,13 +337,13 @@ ELSE
 !
 !JUAN A REVOIR TODO_JPHEXT
 ! <<<<<<< spawn_grid2.f90
-  IXSIZE1_F=SIZE(GRID_MODEL(1)%XXHAT)
-  IYSIZE1_F=SIZE(GRID_MODEL(1)%XYHAT)
+  IXSIZE1_F=SIZE(XXHAT1)
+  IYSIZE1_F=SIZE(XYHAT1)
 ! before the interpolation of XXHAT into PXHAT, we need to use LS_FORCING_ll
 ! to communicate the values on the subdomains of the son grid to the appropriate processes
 ! LS_FORCING_ll does not work on 1D arrays, so we have to construct a temporary pseudo-2D array
   ALLOCATE(ZXHAT_2D_F(IXSIZE1_F,IYSIZE1_F))
-  ZXHAT_2D_F(:,:) = SPREAD(GRID_MODEL(1)%XXHAT(:),DIM=2,NCOPIES=IYSIZE1_F)
+  ZXHAT_2D_F(:,:) = SPREAD(XXHAT1(:),DIM=2,NCOPIES=IYSIZE1_F)
   CALL GOTO_MODEL(1)
   CALL GO_TOMODEL_ll(1, IINFO_ll)
   CALL GET_CHILD_DIM_ll(IMI, IDIMX_C, IDIMY_C, IINFO_ll)
@@ -403,7 +404,7 @@ ELSE
 ! to communicate the values on the subdomains of the son grid to the appropriate processes
 ! LS_FORCING_ll does not work on 1D arrays, so we have to construct a temporary pseudo-2D array
   ALLOCATE(ZYHAT_2D_F(IXSIZE1_F,IYSIZE1_F))
-  ZYHAT_2D_F(:,:) = SPREAD(GRID_MODEL(1)%XYHAT(:),DIM=1,NCOPIES=IXSIZE1_F)
+  ZYHAT_2D_F(:,:) = SPREAD(XYHAT1(:),DIM=1,NCOPIES=IXSIZE1_F)
   CALL GOTO_MODEL(1)
   CALL GO_TOMODEL_ll(1, IINFO_ll)
   CALL GET_CHILD_DIM_ll(IMI, IDIMX_C, IDIMY_C, IINFO_ll)
@@ -455,10 +456,10 @@ ELSE
   DEALLOCATE(ZYHAT_EXTENDED_C)
   DEALLOCATE(ZYHAT_2D_C)
 !!$=======
-!!$  IXSIZE1=SIZE(GRID_MODEL(1)%XXHAT)
+!!$  IXSIZE1=SIZE(XXHAT1)
 !!$  ALLOCATE(ZXHAT_EXTENDED(IXSIZE1+1))
-!!$  ZXHAT_EXTENDED(1:IXSIZE1)=GRID_MODEL(1)%XXHAT(:)
-!!$  ZXHAT_EXTENDED(IXSIZE1+1)=2.*GRID_MODEL(1)%XXHAT(IXSIZE1)-GRID_MODEL(1)%XXHAT(IXSIZE1-1)
+!!$  ZXHAT_EXTENDED(1:IXSIZE1)=XXHAT1(:)
+!!$  ZXHAT_EXTENDED(IXSIZE1+1)=2.*XXHAT1(IXSIZE1)-XXHAT1(IXSIZE1-1)
 !!$  DO JEPSX = 1,KDXRATIO
 !!$    ZPOND2 = FLOAT(JEPSX-1)/FLOAT(KDXRATIO)
 !!$    ZPOND1 = 1.-ZPOND2
@@ -471,10 +472,10 @@ ELSE
 !!$  END DO
 !!$  DEALLOCATE(ZXHAT_EXTENDED)
 !!$!
-!!$  IYSIZE1=SIZE(GRID_MODEL(1)%XYHAT)
+!!$  IYSIZE1=SIZE(XYHAT1)
 !!$  ALLOCATE(ZYHAT_EXTENDED(IYSIZE1+1))
-!!$  ZYHAT_EXTENDED(1:IYSIZE1)=GRID_MODEL(1)%XYHAT(:)
-!!$  ZYHAT_EXTENDED(IYSIZE1+1)=2.*GRID_MODEL(1)%XYHAT(IYSIZE1)-GRID_MODEL(1)%XYHAT(IYSIZE1-1)
+!!$  ZYHAT_EXTENDED(1:IYSIZE1)=XYHAT1(:)
+!!$  ZYHAT_EXTENDED(IYSIZE1+1)=2.*XYHAT1(IYSIZE1)-XYHAT1(IYSIZE1-1)
 !!$  DO JEPSY = 1,KDYRATIO
 !!$    ZPOND2 = FLOAT(JEPSY-1)/FLOAT(KDYRATIO)
 !!$    ZPOND1 = 1.-ZPOND2
@@ -501,9 +502,9 @@ PLATOR = XLATORI
 !*       3.    INITIALIZATION OF ZS and ZSMT:
 !              ------------------------------
 CALL SPAWN_ZS(IXOR_F,IXEND_F,IYOR_F,IYEND_F,KDXRATIO,KDYRATIO,IDIMX_C,IDIMY_C,LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,CLUOUT,  &
-              GRID_MODEL(1)%XZS,  PZS,  'ZS    ',PZS_LS)
+              XZS1,  PZS,  'ZS    ',PZS_LS)
 CALL SPAWN_ZS(IXOR_F,IXEND_F,IYOR_F,IYEND_F,KDXRATIO,KDYRATIO,IDIMX_C,IDIMY_C,LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,CLUOUT,  &
-              GRID_MODEL(1)%XZSMT,PZSMT,'ZSMT  ',PZSMT_LS)
+              XZSMT1,PZSMT,'ZSMT  ',PZSMT_LS)
 !
 CALL MPPDB_CHECK2D(PZS,"SPAWN_GRID2:PZS",PRECISION)
 CALL MPPDB_CHECK2D(PZSMT,"SPAWN_GRID2:PZSMT",PRECISION)
diff --git a/src/MNH/spawn_pressure2.f90 b/src/MNH/spawn_pressure2.f90
index be300a2b4..431f13a82 100644
--- a/src/MNH/spawn_pressure2.f90
+++ b/src/MNH/spawn_pressure2.f90
@@ -259,7 +259,7 @@ END IF
 !
 !* iterative loop
   DO JCOUNT=1,10
-    CALL COMPUTE_EXNER_FROM_TOP(ZTHV1(:,:,IKE-1:IKE+1),GRID_MODEL(1)%XZZ(:,:,IKE-1:IKE+1),   &
+    CALL COMPUTE_EXNER_FROM_TOP(ZTHV1(:,:,IKE-1:IKE+1),XZZ1(:,:,IKE-1:IKE+1),   &
                                 ZHYDEXNTOP1(:,:),                              &
                                 ZWORK(:,:,IKE-1:IKE+1),ZHYDEXN1(:,:,IKE-1:IKE+1))
     ZHYDEXNTOP1(:,:)=ZHYDEXNTOP1(:,:)+ZEXN1(:,:,IKE)-ZHYDEXN1(:,:,IKE)
@@ -269,7 +269,7 @@ END IF
 !*       2.3      Model 1 hydrostatic pressure
 !                 ----------------------------
 !
-  CALL COMPUTE_EXNER_FROM_TOP(ZTHV1,GRID_MODEL(1)%XZZ,ZHYDEXNTOP1,ZWORK,ZHYDEXN1)
+  CALL COMPUTE_EXNER_FROM_TOP(ZTHV1,XZZ1,ZHYDEXNTOP1,ZWORK,ZHYDEXN1)
 !
   DEALLOCATE(ZTHV1)
   DEALLOCATE(ZWORK)
diff --git a/src/MNH/spawning.f90 b/src/MNH/spawning.f90
index f24887195..ce4070b7b 100644
--- a/src/MNH/spawning.f90
+++ b/src/MNH/spawning.f90
@@ -261,8 +261,16 @@ END SUBROUTINE UPDATE_MODD_FROM_NMLVAR
 SUBROUTINE SET_POINTERS_TO_MODEL1()
 !
 USE MODD_FIELD_n
+USE MODD_GRID_n
 USE MODD_PRECIP_n
 !
+XXHAT1 => XXHAT
+XYHAT1 => XYHAT
+XZHAT1 => XZHAT
+XZS1 => XZS
+XZSMT1 => XZSMT
+XZZ1 => XZZ
+LSLEVE1 => LSLEVE
 XACPRR1 => XACPRR
 XTHT1 => XTHT
 XUT1 => XUT
diff --git a/src/MNH/write_lfin.f90 b/src/MNH/write_lfin.f90
index 4d95b32e3..a60fe02f3 100644
--- a/src/MNH/write_lfin.f90
+++ b/src/MNH/write_lfin.f90
@@ -365,58 +365,20 @@ END IF
 !
 !*       1.1    Type and Dimensions :
 !
-YDIR='--'
-!
-YRECFM='STORAGE_TYPE'
-YCOMMENT=' '
-IGRID=0
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,CSTORAGE_TYPE,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='IMAX'
-YCOMMENT=' '
-IGRID=0
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,NIMAX_ll,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='JMAX'
-YCOMMENT=' '
-IGRID=0
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,NJMAX_ll,IGRID,ILENCH,YCOMMENT,IRESP)
+CALL IO_WRITE_FIELD(TPFILE,'STORAGE_TYPE',CLUOUT,IRESP,CSTORAGE_TYPE)
 !
-YRECFM='JPHEXT'
-YCOMMENT=' '
-IGRID=0
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,JPHEXT,IGRID,ILENCH,YCOMMENT,IRESP)
+CALL IO_WRITE_FIELD(TPFILE,'IMAX',CLUOUT,IRESP,NIMAX_ll)
+CALL IO_WRITE_FIELD(TPFILE,'JMAX',CLUOUT,IRESP,NJMAX_ll)
+CALL IO_WRITE_FIELD(TPFILE,'KMAX',CLUOUT,IRESP,NKMAX)
 !
-YRECFM='KMAX'
-YCOMMENT=' '
-IGRID=0
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,NKMAX,IGRID,ILENCH,YCOMMENT,IRESP)
+CALL IO_WRITE_FIELD(TPFILE,'JPHEXT',CLUOUT,IRESP,JPHEXT)
 !
 !*       1.2    Grid variables :
 !
 IF (.NOT.LCARTESIAN) THEN
-  YRECFM='RPK'
-  YCOMMENT=' '
-  IGRID=0
-  ILENCH=LEN(YCOMMENT)
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XRPK,IGRID,ILENCH,YCOMMENT,IRESP)
-! 
-  YRECFM='LONORI'
-  YCOMMENT='DEGREES'
-  IGRID=0
-  ILENCH=LEN(YCOMMENT)
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XLONORI,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-  YRECFM='LATORI'
-  YCOMMENT='DEGREES'
-  IGRID=0
-  ILENCH=LEN(YCOMMENT)
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XLATORI,IGRID,ILENCH,YCOMMENT,IRESP)
+  CALL IO_WRITE_FIELD(TPFILE,'RPK',   CLUOUT,IRESP,XRPK)
+  CALL IO_WRITE_FIELD(TPFILE,'LONORI',CLUOUT,IRESP,XLONORI)
+  CALL IO_WRITE_FIELD(TPFILE,'LATORI',CLUOUT,IRESP,XLATORI)
 ! 
 !* diagnostic of 1st mass point
 !
@@ -428,109 +390,48 @@ IF (.NOT.LCARTESIAN) THEN
   CALL SM_LATLON(XLATORI,XLONORI,ZXHATM,ZYHATM,ZLATOR,ZLONOR)
   DEALLOCATE(ZXHAT_ll,ZYHAT_ll)
 !
-  YRECFM='LONOR'
-  YCOMMENT='DEGREES'
-  IGRID=0
-  ILENCH=LEN(YCOMMENT)
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZLONOR,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-  YRECFM='LATOR'
-  YCOMMENT='DEGREES'
-  IGRID=0
-  ILENCH=LEN(YCOMMENT)
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZLATOR,IGRID,ILENCH,YCOMMENT,IRESP)
+  !LONOR and LATOR not in TFIELDLIST bacause local variables
+  TZFIELD%CMNHNAME   = 'LONOR'
+  TZFIELD%CSTDNAME   = ''
+  TZFIELD%CLONGNAME  = 'MesoNH: LONOR'
+  TZFIELD%CUNITS     = 'degree'
+  TZFIELD%CDIR       = '--'
+  TZFIELD%CCOMMENT   = 'Longitude of 1st mass point'
+  TZFIELD%NGRID      = 0
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 0
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZLONOR)
+!
+  TZFIELD%CMNHNAME   = 'LATOR'
+  TZFIELD%CLONGNAME  = 'MesoNH: LATOR'
+  TZFIELD%CCOMMENT   = 'Latitude of 1st mass point'
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZLATOR)
 END IF 
 !
-YRECFM='THINSHELL'
-YCOMMENT=' '
-IGRID=0
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,LTHINSHELL,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='LAT0'
-YCOMMENT='reference latitude for conformal projection (DEGREES)'
-IGRID=0
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XLAT0,IGRID,ILENCH,YCOMMENT,IRESP)
-! 
-YRECFM='LON0'
-YCOMMENT='reference longitude for conformal projection (DEGREES)'
-IGRID=0
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XLON0,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='BETA'
-YCOMMENT='rotation angle (DEGREES)'
-IGRID=0
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XBETA,IGRID,ILENCH,YCOMMENT,IRESP)
-! 
-YRECFM='XHAT'
-YDIR='XX'
-YCOMMENT='Position x in the conformal or cartesian plane (METERS)'
-IGRID=2
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XXHAT,IGRID,ILENCH,YCOMMENT,IRESP)
+CALL IO_WRITE_FIELD(TPFILE,'THINSHELL',CLUOUT,IRESP,LTHINSHELL)
+CALL IO_WRITE_FIELD(TPFILE,'LAT0',CLUOUT,IRESP,XLAT0)
+CALL IO_WRITE_FIELD(TPFILE,'LON0',CLUOUT,IRESP,XLON0)
+CALL IO_WRITE_FIELD(TPFILE,'BETA',CLUOUT,IRESP,XBETA)
 !
-YRECFM='YHAT'
-YDIR='YY'
-YCOMMENT='Position y in the conformal or cartesian plane (METERS)'
-IGRID=3
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XYHAT,IGRID,ILENCH,YCOMMENT,IRESP)
+CALL IO_WRITE_FIELD(TPFILE,'XHAT',CLUOUT,IRESP,XXHAT)
+CALL IO_WRITE_FIELD(TPFILE,'YHAT',CLUOUT,IRESP,XYHAT)
+CALL IO_WRITE_FIELD(TPFILE,'ZHAT',CLUOUT,IRESP,XZHAT)
 !
-YRECFM='ZHAT'
-YDIR='--'
-YCOMMENT='height level without orography (METERS)'
-IGRID=4
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XZHAT,IGRID,ILENCH,YCOMMENT,IRESP)
 ! #ifdef MNH_NCWRIT
 ! !
 ! !*SB*MAY2012
 ! !*SB* * WRITE ALT
-! IF (LNETCDF) THEN
-!  YRECFM='ALT'
-!  YCOMMENT='X_Y_Z_ALTitude (M)'
-!  IGRID=4
-!  ILENCH=LEN(YCOMMENT)
-!  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XZZ,IGRID,ILENCH,YCOMMENT,IRESP)
-! END IF
+! IF (LNETCDF) CALL IO_WRITE_FIELD(TPFILE,'ALT',CLUOUT,IRESP,XZZ)
 ! #endif 
+!
 IF (.NOT.LCARTESIAN) THEN
- YRECFM='LAT'
- YCOMMENT='X_Y_latitude (degree)'
- IGRID=1
- ILENCH=LEN(YCOMMENT)
- CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XLAT,IGRID,ILENCH,YCOMMENT,IRESP)
-
- YRECFM='LON'
- YCOMMENT='X_Y_longitude (degree)'
- IGRID=1
- ILENCH=LEN(YCOMMENT)
- CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XLON,IGRID,ILENCH,YCOMMENT,IRESP)
+  CALL IO_WRITE_FIELD(TPFILE,'LAT',CLUOUT,IRESP,XLAT)
+  CALL IO_WRITE_FIELD(TPFILE,'LON',CLUOUT,IRESP,XLON)
 END IF
 !
-YRECFM='ZS'
-YDIR='XY'
-YCOMMENT='orography (METERS)'
-IGRID=4
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XZS,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='ZSMT'
-YDIR='XY'
-YCOMMENT='smooth orography (METERS)'
-IGRID=4
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XZSMT,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='SLEVE'
-YDIR='--'
-YCOMMENT=''
-IGRID=4
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,LSLEVE,IGRID,ILENCH,YCOMMENT,IRESP)
+CALL IO_WRITE_FIELD(TPFILE,'ZS',   CLUOUT,IRESP,XZS)
+CALL IO_WRITE_FIELD(TPFILE,'ZSMT', CLUOUT,IRESP,XZSMT)
+CALL IO_WRITE_FIELD(TPFILE,'SLEVE',CLUOUT,IRESP,LSLEVE)
 !
 IF (LSLEVE) THEN
   YRECFM='LEN1'
@@ -1639,54 +1540,21 @@ END IF
 !
 !*       1.5    Reference state variables :
 !
-YDIR='--'
-!
-YRECFM='RHOREFZ'
-YCOMMENT='rhodz for reference state without orography (kg/m3)'
-IGRID=4
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XRHODREFZ,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='THVREFZ'
-YCOMMENT='thetavz for reference state without orography (K)'
-IGRID=4
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XTHVREFZ,IGRID,ILENCH,YCOMMENT,IRESP)
+CALL IO_WRITE_FIELD(TPFILE,'RHOREFZ',CLUOUT,IRESP,XRHODREFZ)
+CALL IO_WRITE_FIELD(TPFILE,'THVREFZ',CLUOUT,IRESP,XTHVREFZ)
+CALL IO_WRITE_FIELD(TPFILE,'EXNTOP', CLUOUT,IRESP,XEXNTOP)
 !
-YRECFM='EXNTOP'
-YCOMMENT='Exner function at model top'
-IGRID=4
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XEXNTOP,IGRID,ILENCH,YCOMMENT,IRESP)
+YDIR='--'
 !
 !*       1.6  Tendencies                                         
 !
 IF (CPROGRAM == 'MESONH') THEN
-
+  CALL IO_WRITE_FIELD(TPFILE,'US_PRES',CLUOUT,IRESP,XRUS_PRES)
+  CALL IO_WRITE_FIELD(TPFILE,'VS_PRES',CLUOUT,IRESP,XRVS_PRES)
+  CALL IO_WRITE_FIELD(TPFILE,'WS_PRES',CLUOUT,IRESP,XRWS_PRES)
+  CALL IO_WRITE_FIELD(TPFILE,'THS_CLD',CLUOUT,IRESP,XRTHS_CLD)
+!
  YDIR='XY'
- YRECFM='US_PRES'
- YCOMMENT='X_Y_Z_US_PRES'                 
- IGRID=2
- ILENCH=LEN(YCOMMENT)
- CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XRUS_PRES,IGRID,ILENCH,YCOMMENT,IRESP)
-!
- YRECFM='VS_PRES'
- YCOMMENT='X_Y_Z_VS_PRES'                       
- IGRID=3
- ILENCH=LEN(YCOMMENT)
- CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XRVS_PRES,IGRID,ILENCH,YCOMMENT,IRESP)
-!
- YRECFM='WS_PRES'
- YCOMMENT='X_Y_Z_WS_PRES'             
- IGRID=4
- ILENCH=LEN(YCOMMENT)
- CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XRWS_PRES,IGRID,ILENCH,YCOMMENT,IRESP)
-!
- YRECFM='THS_CLD'
- YCOMMENT='X_Y_Z_THS_CLD'                 
- IGRID=1
- ILENCH=LEN(YCOMMENT)
- CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XRTHS_CLD,IGRID,ILENCH,YCOMMENT,IRESP)
 !
  IF (NRR >=1) THEN
    IRR=0
-- 
GitLab