diff --git a/src/LIB/SURCOUCHE/src/mode_field.f90 b/src/LIB/SURCOUCHE/src/mode_field.f90
index ba003cd745d9f577516687bea3d52e462d845f3c..d94d611b5d56df7b85d5ad035d8510a05487f535 100644
--- a/src/LIB/SURCOUCHE/src/mode_field.f90
+++ b/src/LIB/SURCOUCHE/src/mode_field.f90
@@ -1206,6 +1206,195 @@ ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL))
 IDX = IDX+1
 !
 IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'INPAP'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: INPAP'
+TFIELDLIST(IDX)%CUNITS     = 'kg m-2 s-1'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_INstantaneous Precipitating Aerosol Rate'
+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   = 'ACPAP'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: ACPAP'
+TFIELDLIST(IDX)%CUNITS     = 'kg m-2'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_ACcumulated Precipitating Aerosol Rate'
+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   = 'EFIELDU'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: EFIELDU'
+TFIELDLIST(IDX)%CUNITS     = 'V m-1'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_Z_EFIELDU'
+TFIELDLIST(IDX)%NGRID      = 1
+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   = 'EFIELDV'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: EFIELDV'
+TFIELDLIST(IDX)%CUNITS     = 'V m-1'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_Z_EFIELDV'
+TFIELDLIST(IDX)%NGRID      = 1
+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   = 'EFIELDW'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: EFIELDW'
+TFIELDLIST(IDX)%CUNITS     = 'V m-1'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_Z_EFIELDW'
+TFIELDLIST(IDX)%NGRID      = 1
+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   = 'NI_IAGGS'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: NI_IAGGS'
+TFIELDLIST(IDX)%CUNITS     = 'C m-3 s-1'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_Z_NI_IAGGS'
+TFIELDLIST(IDX)%NGRID      = 1
+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   = 'NI_IDRYG'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: NI_IDRYG'
+TFIELDLIST(IDX)%CUNITS     = 'C m-3 s-1'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_Z_NI_IDRYG'
+TFIELDLIST(IDX)%NGRID      = 1
+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   = 'NI_SDRYG'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: NI_SDRYG'
+TFIELDLIST(IDX)%CUNITS     = 'C m-3 s-1'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_Z_NI_SDRYG'
+TFIELDLIST(IDX)%NGRID      = 1
+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   = 'INDUC_CG'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: INDUC_CG'
+TFIELDLIST(IDX)%CUNITS     = 'C m-3 s-1'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_Z_INDUC_CG'
+TFIELDLIST(IDX)%NGRID      = 1
+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   = 'TRIG_IC'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: TRIG_IC'
+TFIELDLIST(IDX)%CUNITS     = '1'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_FLASH_MAP_TRIG_IC'
+TFIELDLIST(IDX)%NGRID      = 1
+TFIELDLIST(IDX)%NTYPE      = TYPEINT
+TFIELDLIST(IDX)%NDIMS      = 2
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'IMPACT_CG'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: IMPACT_CG'
+TFIELDLIST(IDX)%CUNITS     = '1'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_FLASH_MAP_IMPACT_CG'
+TFIELDLIST(IDX)%NGRID      = 1
+TFIELDLIST(IDX)%NTYPE      = TYPEINT
+TFIELDLIST(IDX)%NDIMS      = 2
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'AREA_CG'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: AREA_CG'
+TFIELDLIST(IDX)%CUNITS     = '1'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_FLASH_MAP_2DAREA_CG'
+TFIELDLIST(IDX)%NGRID      = 1
+TFIELDLIST(IDX)%NTYPE      = TYPEINT
+TFIELDLIST(IDX)%NDIMS      = 2
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'AREA_IC'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: AREA_IC'
+TFIELDLIST(IDX)%CUNITS     = '1'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_FLASH_MAP_2DAREA_IC'
+TFIELDLIST(IDX)%NGRID      = 1
+TFIELDLIST(IDX)%NTYPE      = TYPEINT
+TFIELDLIST(IDX)%NDIMS      = 2
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'FLASH_3DCG'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: FLASH_3DCG'
+TFIELDLIST(IDX)%CUNITS     = '1'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_Z_FLASH_MAP_3DCG'
+TFIELDLIST(IDX)%NGRID      = 1
+TFIELDLIST(IDX)%NTYPE      = TYPEINT
+TFIELDLIST(IDX)%NDIMS      = 3
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'FLASH_3DIC'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: FLASH_3DIC'
+TFIELDLIST(IDX)%CUNITS     = '1'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_Z_FLASH_MAP_3DIC'
+TFIELDLIST(IDX)%NGRID      = 1
+TFIELDLIST(IDX)%NTYPE      = TYPEINT
+TFIELDLIST(IDX)%NDIMS      = 3
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
 TFIELDLIST(IDX)%CMNHNAME   = 'PHC'
 TFIELDLIST(IDX)%CSTDNAME   = ''
 TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: PHC'
@@ -1502,6 +1691,32 @@ ALLOCATE(TFIELDLIST(IDX)%TFIELD_X0D(IMODEL))
 IDX = IDX+1
 !
 IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'BL_DEPTH'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: BL_DEPTH'
+TFIELDLIST(IDX)%CUNITS     = 'm'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_BL_DEPTH'
+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   = 'SBL_DEPTH'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: SBL_DEPTH'
+TFIELDLIST(IDX)%CUNITS     = 'm'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_BL_SDEPTH'
+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   = 'WTHVMF'
 TFIELDLIST(IDX)%CSTDNAME   = ''
 TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: WTHVMF'
@@ -2424,6 +2639,289 @@ TFIELDLIST(IDX)%NDIMS      = 2
 ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL))
 IDX = IDX+1
 !
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'VT_FLX'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: VT_FLX'
+TFIELDLIST(IDX)%CUNITS     = 'K m s-1'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = ''
+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   = 'WT_FLX'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: WT_FLX'
+TFIELDLIST(IDX)%CUNITS     = 'K m s-1'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = ''
+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   = 'RTHS_EDDY_FLUX'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: RTHS_EDDY_FLUX'
+!TODO PW: units?
+TFIELDLIST(IDX)%CUNITS     = ''
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = ''
+TFIELDLIST(IDX)%NGRID      = 1
+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   = 'VU_FLX'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: VU_FLX'
+TFIELDLIST(IDX)%CUNITS     = 'm s-2'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = ''
+TFIELDLIST(IDX)%NGRID      = 1
+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   = 'RVS_EDDY_FLUX'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: RVS_EDDY_FLUX'
+!TODO PW: units?
+TFIELDLIST(IDX)%CUNITS     = ''
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = ''
+TFIELDLIST(IDX)%NGRID      = 3
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 3
+ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL))
+IDX = IDX+1
+!
+!
+IF (TRIM(CPROGRAM)=='REAL') THEN
+!PW: not yet known: IF (LFILTERING) THEN
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'UT15'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: UT15'
+TFIELDLIST(IDX)%CUNITS     = 'm s-1'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_Z_U component of Total wind'
+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   = 'VT15'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: VT15'
+TFIELDLIST(IDX)%CUNITS     = 'm s-1'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_Z_V component of Total wind'
+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   = 'TEMPTOT'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: TEMPTOT'
+TFIELDLIST(IDX)%CUNITS     = 'K'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_Z_TOTal TEMPerature'
+TFIELDLIST(IDX)%NGRID      = 1
+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   = 'PRESTOT'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: PRESTOT'
+TFIELDLIST(IDX)%CUNITS     = 'Pa'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_Z_TOTal PRESsure'
+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   = 'HUMTOT'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: HUMTOT'
+TFIELDLIST(IDX)%CUNITS     = 'kg kg-1'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_Z_TOTal specific HUMidity'
+TFIELDLIST(IDX)%NGRID      = 1
+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   = 'UT16'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: UT16'
+TFIELDLIST(IDX)%CUNITS     = 'm s-1'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_Z_U component of Environmental wind'
+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   = 'VT16'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: VT16'
+TFIELDLIST(IDX)%CUNITS     = 'm s-1'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_Z_V component of Environmental wind'
+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   = 'TEMPENV'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: TEMPENV'
+TFIELDLIST(IDX)%CUNITS     = 'K'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_Z_ENVironmental TEMPerature'
+TFIELDLIST(IDX)%NGRID      = 1
+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   = 'PRESENV'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: PRESENV'
+TFIELDLIST(IDX)%CUNITS     = 'Pa'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_Z_ENVironmental PRESsure'
+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   = 'HUMENV'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: HUMENV'
+TFIELDLIST(IDX)%CUNITS     = 'kg kg-1'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_Z_ENVironmental specific HUMidity'
+TFIELDLIST(IDX)%NGRID      = 1
+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   = 'UT17'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: UT17'
+TFIELDLIST(IDX)%CUNITS     = 'm s-1'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_Z_U component of Basic wind'
+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   = 'VT17'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: VT17'
+TFIELDLIST(IDX)%CUNITS     = 'm s-1'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_Z_V component of Basic wind'
+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   = 'TEMPBAS'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: TEMPBAS'
+TFIELDLIST(IDX)%CUNITS     = 'K'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_Z_BASic TEMPerature'
+TFIELDLIST(IDX)%NGRID      = 1
+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   = 'PRESBAS'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: PRESBAS'
+TFIELDLIST(IDX)%CUNITS     = 'Pa'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_Z_BASic PRESsure'
+TFIELDLIST(IDX)%NGRID      = 1
+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   = 'HUMBAS'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: HUMBAS'
+TFIELDLIST(IDX)%CUNITS     = 'kg kg-1'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_Z_BASic specific HUMidity'
+TFIELDLIST(IDX)%NGRID      = 1
+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   = 'VTDIS'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: VTDIS'
+TFIELDLIST(IDX)%CUNITS     = 'm s-1'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_Z_Total disturbance tangential wind'
+TFIELDLIST(IDX)%NGRID      = 1
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 3
+ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL))
+IDX = IDX+1
+!
+!END IF !LFILTERING
+END IF !CPROGRAM==REAL
+!
+!
 WRITE(YMSG,'("number of used fields=",I4," out of ",I4)') IDX-1,MAXFIELDS
 CALL PRINT_MSG(NVERB_INFO,'GEN','INI_FIELD_LIST',TRIM(YMSG))
 !
@@ -2667,10 +3165,15 @@ USE MODD_REF
 USE MODD_ADV_n
 USE MODD_CONF_n
 USE MODD_DEEP_CONVECTION_n
+USE MODD_DEF_EDDY_FLUX_n
+USE MODD_DEF_EDDYUV_FLUX_n
 USE MODD_DYN_n
+USE MODD_ELEC_n
 USE MODD_FIELD_n
 USE MODD_GR_FIELD_n
 USE MODD_GRID_n
+USE MODD_HURR_FIELD_n
+USE MODD_LIMA_PRECIP_SCAVENGING_n
 USE MODD_LSFIELD_n
 USE MODD_PARAM_n
 USE MODD_PAST_FIELD_n
@@ -2819,6 +3322,21 @@ CALL FIND_FIELD_ID_FROM_MNHNAME('DUM',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFR
 CALL FIND_FIELD_ID_FROM_MNHNAME('DVM',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XDVM
 CALL FIND_FIELD_ID_FROM_MNHNAME('DWM',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XDWM
 !
+! MODD_LIMA_PRECIP_SCAVENGING_n variables
+!
+CALL FIND_FIELD_ID_FROM_MNHNAME('INPAP',IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XINPAP
+CALL FIND_FIELD_ID_FROM_MNHNAME('ACPAP',IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XACPAP
+!
+! MODD_ELEC_n variables
+!
+CALL FIND_FIELD_ID_FROM_MNHNAME('EFIELDU',IID,IRESP);  TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XEFIELDU
+CALL FIND_FIELD_ID_FROM_MNHNAME('EFIELDV',IID,IRESP);  TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XEFIELDV
+CALL FIND_FIELD_ID_FROM_MNHNAME('EFIELDW',IID,IRESP);  TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XEFIELDW
+CALL FIND_FIELD_ID_FROM_MNHNAME('NI_IAGGS',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XNI_IAGGS
+CALL FIND_FIELD_ID_FROM_MNHNAME('NI_IDRYG',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XNI_IDRYG
+CALL FIND_FIELD_ID_FROM_MNHNAME('NI_SDRYG',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XNI_SDRYG
+CALL FIND_FIELD_ID_FROM_MNHNAME('INDUC_CG',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XIND_RATE
+!
 ! MODD_CH_PH_n variables
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME('PHC',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XPHC
@@ -2879,7 +3397,9 @@ END IF
 !
 ! MODD_TURB_n variables
 !
-CALL FIND_FIELD_ID_FROM_MNHNAME('WTHVMF',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XWTHVMF
+CALL FIND_FIELD_ID_FROM_MNHNAME('BL_DEPTH', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XBL_DEPTH
+CALL FIND_FIELD_ID_FROM_MNHNAME('SBL_DEPTH',IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XSBL_DEPTH
+CALL FIND_FIELD_ID_FROM_MNHNAME('WTHVMF',   IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XWTHVMF
 !
 ! MODD_REF_n variables
 !
@@ -2949,6 +3469,38 @@ CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRG',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D
 CALL FIND_FIELD_ID_FROM_MNHNAME('INPRH',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XINPRH
 CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRH',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XACPRH
 !
+! MODD_DEF_EDDY_FLUX_n variables
+!
+CALL FIND_FIELD_ID_FROM_MNHNAME('VT_FLX',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA         => XVTH_FLUX_M
+CALL FIND_FIELD_ID_FROM_MNHNAME('WT_FLX',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA         => XWTH_FLUX_M
+CALL FIND_FIELD_ID_FROM_MNHNAME('RTHS_EDDY_FLUX',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XRTHS_EDDY_FLUX
+!
+! MODD_DEF_EDDYUV_FLUX_n variables
+!
+CALL FIND_FIELD_ID_FROM_MNHNAME('VU_FLX',IID,IRESP);        TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XVU_FLUX_M
+CALL FIND_FIELD_ID_FROM_MNHNAME('RVS_EDDY_FLUX',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XRVS_EDDY_FLUX
+!
+! MODD_HURR_FIELD_n variables
+!
+IF (CPROGRAM=='REAL') THEN
+  CALL FIND_FIELD_ID_FROM_MNHNAME('UT15',   IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XUTOT
+  CALL FIND_FIELD_ID_FROM_MNHNAME('VT15',   IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XVTOT
+  CALL FIND_FIELD_ID_FROM_MNHNAME('TEMPTOT',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XTTOT
+  CALL FIND_FIELD_ID_FROM_MNHNAME('PRESTOT',IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XPTOT
+  CALL FIND_FIELD_ID_FROM_MNHNAME('HUMTOT', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XQTOT
+  CALL FIND_FIELD_ID_FROM_MNHNAME('UT16',   IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XUENV
+  CALL FIND_FIELD_ID_FROM_MNHNAME('VT16',   IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XVENV
+  CALL FIND_FIELD_ID_FROM_MNHNAME('TEMPENV',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XTENV
+  CALL FIND_FIELD_ID_FROM_MNHNAME('PRESENV',IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XPENV
+  CALL FIND_FIELD_ID_FROM_MNHNAME('HUMENV', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XQENV
+  CALL FIND_FIELD_ID_FROM_MNHNAME('UT17',   IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XUBASIC
+  CALL FIND_FIELD_ID_FROM_MNHNAME('VT17',   IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XVBASIC
+  CALL FIND_FIELD_ID_FROM_MNHNAME('TEMPBAS',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XTBASIC
+  CALL FIND_FIELD_ID_FROM_MNHNAME('PRESBAS',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XPBASIC
+  CALL FIND_FIELD_ID_FROM_MNHNAME('HUMBAS', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XQBASIC
+  CALL FIND_FIELD_ID_FROM_MNHNAME('VTDIS',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XVTDIS
+END IF
+!
 !
 !
 !
@@ -3055,6 +3607,21 @@ CALL FIND_FIELD_ID_FROM_MNHNAME('DUM',IID,IRESP); XDUM => TFIELDLIST(IID)%TFIELD
 CALL FIND_FIELD_ID_FROM_MNHNAME('DVM',IID,IRESP); XDVM => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
 CALL FIND_FIELD_ID_FROM_MNHNAME('DWM',IID,IRESP); XDWM => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
 !
+! MODD_LIMA_PRECIP_SCAVENGING_n variables
+!
+CALL FIND_FIELD_ID_FROM_MNHNAME('INPAP',IID,IRESP); XINPAP => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
+CALL FIND_FIELD_ID_FROM_MNHNAME('ACPAP',IID,IRESP); XACPAP => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
+!
+! MODD_ELEC_n variables
+!
+CALL FIND_FIELD_ID_FROM_MNHNAME('EFIELDU',IID,IRESP);  XEFIELDU  => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+CALL FIND_FIELD_ID_FROM_MNHNAME('EFIELDV',IID,IRESP);  XEFIELDV  => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+CALL FIND_FIELD_ID_FROM_MNHNAME('EFIELDW',IID,IRESP);  XEFIELDW  => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+CALL FIND_FIELD_ID_FROM_MNHNAME('NI_IAGGS',IID,IRESP); XNI_IAGGS => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+CALL FIND_FIELD_ID_FROM_MNHNAME('NI_IDRYG',IID,IRESP); XNI_IDRYG => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+CALL FIND_FIELD_ID_FROM_MNHNAME('NI_SDRYG',IID,IRESP); XNI_SDRYG => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+CALL FIND_FIELD_ID_FROM_MNHNAME('INDUC_CG',IID,IRESP); XIND_RATE => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+!
 ! MODD_CH_PH_n variables
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME('PHC',IID,IRESP); XPHC => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
@@ -3222,7 +3789,9 @@ CSURF => TFIELDLIST(IID)%TFIELD_C0D(KTO)%DATA
 !
 ! MODD_TURB_n variables
 !
-CALL FIND_FIELD_ID_FROM_MNHNAME('WTHVMF',IID,IRESP); XWTHVMF => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+CALL FIND_FIELD_ID_FROM_MNHNAME('BL_DEPTH', IID,IRESP); XBL_DEPTH  => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
+CALL FIND_FIELD_ID_FROM_MNHNAME('SBL_DEPTH',IID,IRESP); XSBL_DEPTH => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
+CALL FIND_FIELD_ID_FROM_MNHNAME('WTHVMF',   IID,IRESP); XWTHVMF    => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
 !
 ! MODD_REF_n variables
 !
@@ -3292,6 +3861,40 @@ CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRG',  IID,IRESP); XACPRG   => TFIELDLIST(IID
 CALL FIND_FIELD_ID_FROM_MNHNAME('INPRH',  IID,IRESP); XINPRH   => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
 CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRH',  IID,IRESP); XACPRH   => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
 !
+!
+! MODD_DEF_EDDY_FLUX_n variables
+!
+CALL FIND_FIELD_ID_FROM_MNHNAME('VT_FLX',        IID,IRESP); XVTH_FLUX_M     => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+CALL FIND_FIELD_ID_FROM_MNHNAME('WT_FLX',        IID,IRESP); XWTH_FLUX_M     => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+CALL FIND_FIELD_ID_FROM_MNHNAME('RTHS_EDDY_FLUX',IID,IRESP); XRTHS_EDDY_FLUX => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+!
+! MODD_DEF_EDDYUV_FLUX_n variables
+!
+CALL FIND_FIELD_ID_FROM_MNHNAME('VU_FLX',       IID,IRESP); XVU_FLUX_M     => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+CALL FIND_FIELD_ID_FROM_MNHNAME('RVS_EDDY_FLUX',IID,IRESP); XRVS_EDDY_FLUX => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+!
+!
+! MODD_HURR_FIELD_n variables
+!
+IF (CPROGRAM=='REAL') THEN
+  CALL FIND_FIELD_ID_FROM_MNHNAME('UT15',   IID,IRESP); XUTOT   => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+  CALL FIND_FIELD_ID_FROM_MNHNAME('VT15',   IID,IRESP); XVTOT   => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+  CALL FIND_FIELD_ID_FROM_MNHNAME('TEMPTOT',IID,IRESP); XTTOT   => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+  CALL FIND_FIELD_ID_FROM_MNHNAME('PRESTOT',IID,IRESP); XPTOT   => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
+  CALL FIND_FIELD_ID_FROM_MNHNAME('HUMTOT', IID,IRESP); XQTOT   => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+  CALL FIND_FIELD_ID_FROM_MNHNAME('UT16',   IID,IRESP); XUENV   => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+  CALL FIND_FIELD_ID_FROM_MNHNAME('VT16',   IID,IRESP); XVENV   => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+  CALL FIND_FIELD_ID_FROM_MNHNAME('TEMPENV',IID,IRESP); XTENV   => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+  CALL FIND_FIELD_ID_FROM_MNHNAME('PRESENV',IID,IRESP); XPENV   => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
+  CALL FIND_FIELD_ID_FROM_MNHNAME('HUMENV', IID,IRESP); XQENV   => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+  CALL FIND_FIELD_ID_FROM_MNHNAME('UT17',   IID,IRESP); XUBASIC => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+  CALL FIND_FIELD_ID_FROM_MNHNAME('VT17',   IID,IRESP); XVBASIC => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+  CALL FIND_FIELD_ID_FROM_MNHNAME('TEMPBAS',IID,IRESP); XTBASIC => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+  CALL FIND_FIELD_ID_FROM_MNHNAME('PRESBAS',IID,IRESP); XPBASIC => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+  CALL FIND_FIELD_ID_FROM_MNHNAME('HUMBAS', IID,IRESP); XQBASIC => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+  CALL FIND_FIELD_ID_FROM_MNHNAME('VTDIS',  IID,IRESP); XVTDIS  => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+END IF
+!
 END IF !KFROM/=KTO
 !
 END SUBROUTINE FIELDLIST_GOTO_MODEL
diff --git a/src/LIB/SURCOUCHE/src/mode_gather.f90 b/src/LIB/SURCOUCHE/src/mode_gather.f90
index 383a58443e82a0c47268c3751e9c914a7b3deb2c..9be905a4c873bb6206afccbf13db322ae65a96ea 100644
--- a/src/LIB/SURCOUCHE/src/mode_gather.f90
+++ b/src/LIB/SURCOUCHE/src/mode_gather.f90
@@ -1045,8 +1045,6 @@ INTEGER,                     INTENT(IN) :: KCOMM
 INTEGER,            OPTIONAL,INTENT(IN) :: KXOBOX,KXEBOX,KYOBOX,KYEBOX
 CHARACTER(LEN=*),   OPTIONAL,INTENT(IN) :: HINTER
 
-!INCLUDE 'mpif.h'
-
 INTEGER                       :: JI
 INTEGER                       :: IXO,IXE,IYO,IYE
 INTEGER, DIMENSION(:,:,:),POINTER:: IP
diff --git a/src/MNH/eddyUV_flux_one_wayn.f90 b/src/MNH/eddyUV_flux_one_wayn.f90
index 121f72017a9b8bc57a2ebb6f1560784356191977..f60d64508b1705623dc94f55d8c212f4b6239565 100644
--- a/src/MNH/eddyUV_flux_one_wayn.f90
+++ b/src/MNH/eddyUV_flux_one_wayn.f90
@@ -71,8 +71,9 @@ USE MODI_GRADIENT_U
 USE MODI_BIKHARDT
 USE MODD_BIKHARDT_n
 USE MODD_NESTING
-
-
+!
+USE MODE_FIELD, ONLY : TFIELDLIST, FIND_FIELD_ID_FROM_MNHNAME
+!
 IMPLICIT NONE
 !
 INTEGER, INTENT(IN) :: KMI     ! Model index
@@ -100,7 +101,8 @@ REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZFLUX2 ! Work array=Dad interpolated flux
 REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZDIV_UV! Work array=DIV of ZFLUX2
 INTEGER :: IKU
 !
-INTEGER             :: IDIMX,IDIMY
+INTEGER :: IDIMX,IDIMY
+INTEGER :: IID, IRESP
 !-------------------------------------------------------------------------------
 !
 !
@@ -122,12 +124,16 @@ IF (ISYNCHRO==1 .OR. IDTRATIO_KMI_1 == 1) THEN
 
    ! v'u' (EDDY_FLUX_MODEL(1)%XVU_FLUX_M) of model1 interpolation on the son grid put into ZFLUX2
    ZFLUX2 = 0.
-   IDIMX = SIZE(EDDYUV_FLUX_MODEL(1)%XVU_FLUX_M,1)
-   IDIMY = SIZE(EDDYUV_FLUX_MODEL(1)%XVU_FLUX_M,2)
+   !IDIMX = SIZE(EDDYUV_FLUX_MODEL(1)%XVU_FLUX_M,1)
+   !IDIMY = SIZE(EDDYUV_FLUX_MODEL(1)%XVU_FLUX_M,2)
+   CALL FIND_FIELD_ID_FROM_MNHNAME('VU_FLX',IID,IRESP)
+   IDIMX = SIZE(TFIELDLIST(IID)%TFIELD_X3D(1)%DATA,1)
+   IDIMY = SIZE(TFIELDLIST(IID)%TFIELD_X3D(1)%DATA,2)
    CALL BIKHARDT (XBMX1,XBMX2,XBMX3,XBMX4,XBMY1,XBMY2,XBMY3,XBMY4, &
                   XBFX1,XBFX2,XBFX3,XBFX4,XBFY1,XBFY2,XBFY3,XBFY4, &
                   2,2,IDIMX-1,IDIMY-1,KDXRATIO,KDYRATIO,1,&
-                  HLBCX,HLBCY,EDDYUV_FLUX_MODEL(1)%XVU_FLUX_M,ZFLUX2)
+!                  HLBCX,HLBCY,EDDYUV_FLUX_MODEL(1)%XVU_FLUX_M,ZFLUX2)
+                  HLBCX,HLBCY,TFIELDLIST(IID)%TFIELD_X3D(1)%DATA,ZFLUX2)
 
    ! Lateral boundary conditions 
    ZFLUX2(IIB,:,:)    = ZFLUX2(IIB+1,:,:)
diff --git a/src/MNH/eddy_flux_one_wayn.f90 b/src/MNH/eddy_flux_one_wayn.f90
index f07307d3d7b8ae6e621ac9f28045c1cac04bccf8..0ec1ed8c2fea2c7b7ec5c0887bb9b5f1ed239be3 100644
--- a/src/MNH/eddy_flux_one_wayn.f90
+++ b/src/MNH/eddy_flux_one_wayn.f90
@@ -72,7 +72,9 @@ USE MODI_GRADIENT_U
 USE MODI_BIKHARDT
 USE MODD_BIKHARDT_n
 USE MODD_NESTING
-
+!
+USE MODE_FIELD, ONLY : TFIELDLIST, FIND_FIELD_ID_FROM_MNHNAME
+!
 IMPLICIT NONE
 !
 INTEGER, INTENT(IN) :: KMI     ! Model index
@@ -96,7 +98,8 @@ REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZFLUX2 ! Work array=Dad interpolated flux
                                               ! on the son grid
 INTEGER :: IKU                                              
 !
-INTEGER             :: IDIMX,IDIMY
+INTEGER :: IDIMX,IDIMY
+INTEGER :: IID, IRESP
 !-------------------------------------------------------------------------------
 !
 !
@@ -115,22 +118,28 @@ IF (ISYNCHRO==1 .OR. IDTRATIO_KMI_1 == 1) THEN
 
    ! v'T' (EDDY_FLUX_MODEL(1)%XVTH_FLUX_M) of model1 interpolation on the son grid put into ZFLUX2
    ZFLUX2 = 0.
-   IDIMX = SIZE(EDDY_FLUX_MODEL(1)%XVTH_FLUX_M,1)
-   IDIMY = SIZE(EDDY_FLUX_MODEL(1)%XVTH_FLUX_M,2) 
+   !IDIMX = SIZE(EDDY_FLUX_MODEL(1)%XVTH_FLUX_M,1)
+   !IDIMY = SIZE(EDDY_FLUX_MODEL(1)%XVTH_FLUX_M,2)
+   CALL FIND_FIELD_ID_FROM_MNHNAME('VT_FLX',IID,IRESP)
+   IDIMX = SIZE(TFIELDLIST(IID)%TFIELD_X3D(1)%DATA,1)
+   IDIMY = SIZE(TFIELDLIST(IID)%TFIELD_X3D(1)%DATA,2)
    CALL BIKHARDT (XBMX1,XBMX2,XBMX3,XBMX4,XBMY1,XBMY2,XBMY3,XBMY4, &
                   XBFX1,XBFX2,XBFX3,XBFX4,XBFY1,XBFY2,XBFY3,XBFY4, &
                   2,2,IDIMX-1,IDIMY-1,KDXRATIO,KDYRATIO,1,&
-                  HLBCX,HLBCY,EDDY_FLUX_MODEL(1)%XVTH_FLUX_M,ZFLUX2)
+!                  HLBCX,HLBCY,EDDY_FLUX_MODEL(1)%XVTH_FLUX_M,ZFLUX2)
+                  HLBCX,HLBCY,TFIELDLIST(IID)%TFIELD_X3D(1)%DATA,ZFLUX2)
 
    ! operator GX_U_M used for gradient of v'T' (flux point) placed at a mass point
    XRTHS_EDDY_FLUX(:,:,:) = - XRHODJ(:,:,:)* GX_U_M(1,IKU,1,ZFLUX2,XDXX,XDZZ,XDZX)
         
    ! w'T' (EDDY_FLUX_MODEL(1)%XWTH_FLUX_M) of model1 interpolation on the son grid put into ZFLUX2
    ZFLUX2 = 0.
+   CALL FIND_FIELD_ID_FROM_MNHNAME('WT_FLX',IID,IRESP)
    CALL BIKHARDT (XBMX1,XBMX2,XBMX3,XBMX4,XBMY1,XBMY2,XBMY3,XBMY4, &
                   XBFX1,XBFX2,XBFX3,XBFX4,XBFY1,XBFY2,XBFY3,XBFY4, &
                   2,2,IDIMX-1,IDIMY-1,KDXRATIO,KDYRATIO,1,&
-                  HLBCX,HLBCY,EDDY_FLUX_MODEL(1)%XWTH_FLUX_M,ZFLUX2)
+!                  HLBCX,HLBCY,EDDY_FLUX_MODEL(1)%XWTH_FLUX_M,ZFLUX2)
+                  HLBCX,HLBCY,TFIELDLIST(IID)%TFIELD_X3D(1)%DATA,ZFLUX2)
 
    ! DIV(W'T') put into the source term
    XRTHS_EDDY_FLUX(:,:,:) = XRTHS_EDDY_FLUX(:,:,:) &
diff --git a/src/MNH/goto_model_wrapper.f90 b/src/MNH/goto_model_wrapper.f90
index c6ec88e2760cd76aa147093b6bf53529ccedc66f..de8216031c5c27ea7454c293d02d2c805681a00a 100644
--- a/src/MNH/goto_model_wrapper.f90
+++ b/src/MNH/goto_model_wrapper.f90
@@ -52,7 +52,7 @@ USE MODD_GR_FIELD_n
 !$20140403
 !USE MODD_GRID_CONF_PROJ
 !$
-USE MODD_HURR_FIELD_n
+!USE MODD_HURR_FIELD_n
 !$20140403 add modd_io_surf_mnh
 USE MODD_IO_SURF_MNH   
 !$
@@ -104,10 +104,10 @@ USE MODD_RBK90_Global_n
 USE MODD_RBK90_JacobianSP_n
 USE MODD_RBK90_Parameters_n
 !
-USE MODD_LIMA_PRECIP_SCAVENGING_n
+!USE MODD_LIMA_PRECIP_SCAVENGING_n
 !
-USE MODD_DEF_EDDY_FLUX_n
-USE MODD_DEF_EDDYUV_FLUX_n
+!USE MODD_DEF_EDDY_FLUX_n
+!USE MODD_DEF_EDDYUV_FLUX_n
 USE MODD_RELFRC_n
 USE MODD_ADVFRC_n
 !
@@ -148,7 +148,7 @@ CALL GET_GOTO_MODEL(KFROM, KTO)
 !CALL GRID_CONF_PROJ_GOTO_MODEL(KFROM,KTO)
 !$
 !CALL GRID_GOTO_MODEL(KFROM, KTO)
-CALL HURR_FIELD_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)
 !$
@@ -199,10 +199,10 @@ CALL RBK90_Global_GOTO_MODEL(KFROM, KTO)
 CALL RBK90_JacobianSP_GOTO_MODEL(KFROM, KTO)
 CALL RBK90_Parameters_GOTO_MODEL(KFROM, KTO)
 !
-CALL LIMA_PRECIP_SCAVENGING_GOTO_MODEL(KFROM, KTO)
+!CALL LIMA_PRECIP_SCAVENGING_GOTO_MODEL(KFROM, KTO)
 !
-CALL EDDY_FLUX_GOTO_MODEL(KFROM, KTO)
-CALL EDDYUV_FLUX_GOTO_MODEL(KFROM, KTO)
+!CALL EDDY_FLUX_GOTO_MODEL(KFROM, KTO)
+!CALL EDDYUV_FLUX_GOTO_MODEL(KFROM, KTO)
 CALL ADVFRC_GOTO_MODEL(KFROM, KTO)
 CALL RELFRC_GOTO_MODEL(KFROM, KTO)
 CALL CH_PRODLOSSTOT_GOTO_MODEL(KFROM,KTO)
diff --git a/src/MNH/modd_def_eddyUV_fluxn.f90 b/src/MNH/modd_def_eddyUV_fluxn.f90
index 4447296044709deed0c72e02e96478313c8033d1..f5ded99e4c2e96dde406a53916a6b9a2e238d64f 100644
--- a/src/MNH/modd_def_eddyUV_fluxn.f90
+++ b/src/MNH/modd_def_eddyUV_fluxn.f90
@@ -37,19 +37,7 @@
 USE MODD_PARAMETERS, ONLY: JPMODELMAX
 IMPLICIT NONE
 !
-TYPE EDDYUV_FLUX_t
-!
-REAL, DIMENSION(:,:,:), POINTER :: XVU_FLUX_M=>NULL()
-REAL, DIMENSION(:,:,:), POINTER :: XMT_FLUX=>NULL()
-REAL, DIMENSION(:,:,:), POINTER :: XRVS_EDDY_FLUX=>NULL()
-
-!
-END TYPE EDDYUV_FLUX_t
-!
-TYPE(EDDYUV_FLUX_t), DIMENSION(JPMODELMAX), TARGET, SAVE :: EDDYUV_FLUX_MODEL
-!
 REAL, DIMENSION(:,:,:), POINTER :: XVU_FLUX_M=>NULL()
-REAL, DIMENSION(:,:,:), POINTER :: XMT_FLUX=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: XRVS_EDDY_FLUX=>NULL()
 !
 CONTAINS
@@ -58,16 +46,6 @@ SUBROUTINE EDDYUV_FLUX_GOTO_MODEL(KFROM, KTO)
 !
 INTEGER, INTENT(IN) :: KFROM, KTO
 !
-! Save current state for allocated arrays
-EDDYUV_FLUX_MODEL(KFROM)%XVU_FLUX_M=>XVU_FLUX_M
-EDDYUV_FLUX_MODEL(KFROM)%XMT_FLUX=>XMT_FLUX
-EDDYUV_FLUX_MODEL(KFROM)%XRVS_EDDY_FLUX=>XRVS_EDDY_FLUX
-!
-! Current model is set to model KTO
-XVU_FLUX_M=>EDDYUV_FLUX_MODEL(KTO)%XVU_FLUX_M
-XMT_FLUX=>EDDYUV_FLUX_MODEL(KTO)%XMT_FLUX
-XRVS_EDDY_FLUX=>EDDYUV_FLUX_MODEL(KTO)%XRVS_EDDY_FLUX
-!
 END SUBROUTINE EDDYUV_FLUX_GOTO_MODEL
 !
 END MODULE MODD_DEF_EDDYUV_FLUX_n
diff --git a/src/MNH/modd_def_eddy_fluxn.f90 b/src/MNH/modd_def_eddy_fluxn.f90
index 48cc35c12680176d4cbd9f8ce9c09f60e940bb2a..23a216c8d443e72c91db344e89d1da3bd87f3be2 100644
--- a/src/MNH/modd_def_eddy_fluxn.f90
+++ b/src/MNH/modd_def_eddy_fluxn.f90
@@ -37,16 +37,6 @@
 USE MODD_PARAMETERS, ONLY: JPMODELMAX
 IMPLICIT NONE
 !
-TYPE EDDY_FLUX_t
-!
-REAL, DIMENSION(:,:,:), POINTER :: XVTH_FLUX_M=>NULL()    ! V'th' flux 
-REAL, DIMENSION(:,:,:), POINTER :: XWTH_FLUX_M=>NULL()
-REAL, DIMENSION(:,:,:), POINTER :: XRTHS_EDDY_FLUX=>NULL()
-!
-END TYPE EDDY_FLUX_t
-!
-TYPE(EDDY_FLUX_t), DIMENSION(JPMODELMAX), TARGET, SAVE :: EDDY_FLUX_MODEL
-!
 REAL, DIMENSION(:,:,:), POINTER :: XVTH_FLUX_M=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: XWTH_FLUX_M=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: XRTHS_EDDY_FLUX=>NULL()
@@ -57,16 +47,6 @@ SUBROUTINE EDDY_FLUX_GOTO_MODEL(KFROM, KTO)
 !
 INTEGER, INTENT(IN) :: KFROM, KTO
 !
-! Save current state for allocated arrays
-EDDY_FLUX_MODEL(KFROM)%XVTH_FLUX_M=>XVTH_FLUX_M
-EDDY_FLUX_MODEL(KFROM)%XWTH_FLUX_M=>XWTH_FLUX_M
-EDDY_FLUX_MODEL(KFROM)%XRTHS_EDDY_FLUX=>XRTHS_EDDY_FLUX
-!
-! Current model is set to model KTO
-XVTH_FLUX_M=>EDDY_FLUX_MODEL(KTO)%XVTH_FLUX_M
-XWTH_FLUX_M=>EDDY_FLUX_MODEL(KTO)%XWTH_FLUX_M
-XRTHS_EDDY_FLUX=>EDDY_FLUX_MODEL(KTO)%XRTHS_EDDY_FLUX
-!
 END SUBROUTINE EDDY_FLUX_GOTO_MODEL
 !
 END MODULE MODD_DEF_EDDY_FLUX_n
diff --git a/src/MNH/modd_elecn.f90 b/src/MNH/modd_elecn.f90
index 9c50af2ba2f8729128be774c2f8bc57e60e0edf2..01107258a6d4673e7889ccc6615fa4cf9f1f1d56 100644
--- a/src/MNH/modd_elecn.f90
+++ b/src/MNH/modd_elecn.f90
@@ -40,12 +40,13 @@ IMPLICIT NONE
 
 TYPE ELEC_t
 !
-  REAL, DIMENSION(:,:,:), POINTER :: XNI_SDRYG=>NULL(), XNI_IDRYG=>NULL(),  &
-     XNI_IAGGS=>NULL(),                 & 
-     XEFIELDU=>NULL(), & ! The 3 components of the electric field
-     XEFIELDV=>NULL(), XEFIELDW=>NULL(), &
-     XESOURCEFW=>NULL(),  & ! Fair weather electric charge (C m^-3)
-     XIND_RATE=>NULL(), XEW=>NULL(),  & 
+!  REAL, DIMENSION(:,:,:), POINTER :: XNI_SDRYG=>NULL(), XNI_IDRYG=>NULL(),  &
+!     XNI_IAGGS=>NULL(),                 & 
+!     XEFIELDU=>NULL(), & ! The 3 components of the electric field
+!     XEFIELDV=>NULL(), XEFIELDW=>NULL(), &
+  REAL, DIMENSION(:,:,:), POINTER ::      XESOURCEFW=>NULL(),  & ! Fair weather electric charge (C m^-3)
+!     XIND_RATE=>NULL(), XEW=>NULL(),  & 
+     XEW=>NULL(),  & 
      XIONSOURCEFW =>NULL(), & ! Fair weather ionic source
                               !  (ion pairs m-3 s-1) hold constant in time
      XCION_POS_FW =>NULL(), XCION_NEG_FW =>NULL(), &  !Positive and Negative ion mixing ratio
@@ -78,14 +79,14 @@ SUBROUTINE ELEC_GOTO_MODEL(KFROM, KTO)
 INTEGER, INTENT(IN) :: KFROM, KTO
 !
 ! Save current state for allocated arrays
-ELEC_MODEL(KFROM)%XNI_SDRYG=>XNI_SDRYG
-ELEC_MODEL(KFROM)%XNI_IDRYG=>XNI_IDRYG
-ELEC_MODEL(KFROM)%XNI_IAGGS=>XNI_IAGGS
-ELEC_MODEL(KFROM)%XIND_RATE=>XIND_RATE
+!ELEC_MODEL(KFROM)%XNI_SDRYG=>XNI_SDRYG !Done in FIELDLIST_GOTO_MODEL
+!ELEC_MODEL(KFROM)%XNI_IDRYG=>XNI_IDRYG !Done in FIELDLIST_GOTO_MODEL
+!ELEC_MODEL(KFROM)%XNI_IAGGS=>XNI_IAGGS !Done in FIELDLIST_GOTO_MODEL
+!ELEC_MODEL(KFROM)%XIND_RATE=>XIND_RATE !Done in FIELDLIST_GOTO_MODEL
 ELEC_MODEL(KFROM)%XEW=>XEW
-ELEC_MODEL(KFROM)%XEFIELDU=>XEFIELDU
-ELEC_MODEL(KFROM)%XEFIELDV=>XEFIELDV
-ELEC_MODEL(KFROM)%XEFIELDW=>XEFIELDW
+!ELEC_MODEL(KFROM)%XEFIELDU=>XEFIELDU !Done in FIELDLIST_GOTO_MODEL
+!ELEC_MODEL(KFROM)%XEFIELDV=>XEFIELDV !Done in FIELDLIST_GOTO_MODEL
+!ELEC_MODEL(KFROM)%XEFIELDW=>XEFIELDW !Done in FIELDLIST_GOTO_MODEL
 ELEC_MODEL(KFROM)%XESOURCEFW=>XESOURCEFW
 ELEC_MODEL(KFROM)%XIONSOURCEFW=>XIONSOURCEFW
 ELEC_MODEL(KFROM)%XCION_POS_FW=>XCION_POS_FW
@@ -100,14 +101,14 @@ ELEC_MODEL(KFROM)%XAF_E=>XAF_E
 ELEC_MODEL(KFROM)%XCF_E=>XCF_E
 !
 ! Current model is set to model KTO
-XNI_SDRYG=>ELEC_MODEL(KTO)%XNI_SDRYG
-XNI_IDRYG=>ELEC_MODEL(KTO)%XNI_IDRYG
-XNI_IAGGS=>ELEC_MODEL(KTO)%XNI_IAGGS
-XIND_RATE=>ELEC_MODEL(KTO)%XIND_RATE
+!XNI_SDRYG=>ELEC_MODEL(KTO)%XNI_SDRYG !Done in FIELDLIST_GOTO_MODEL
+!XNI_IDRYG=>ELEC_MODEL(KTO)%XNI_IDRYG !Done in FIELDLIST_GOTO_MODEL
+!XNI_IAGGS=>ELEC_MODEL(KTO)%XNI_IAGGS !Done in FIELDLIST_GOTO_MODEL
+!XIND_RATE=>ELEC_MODEL(KTO)%XIND_RATE !Done in FIELDLIST_GOTO_MODEL
 XEW=>ELEC_MODEL(KTO)%XEW
-XEFIELDU=>ELEC_MODEL(KTO)%XEFIELDU
-XEFIELDV=>ELEC_MODEL(KTO)%XEFIELDV
-XEFIELDW=>ELEC_MODEL(KTO)%XEFIELDW
+!XEFIELDU=>ELEC_MODEL(KTO)%XEFIELDU !Done in FIELDLIST_GOTO_MODEL
+!XEFIELDV=>ELEC_MODEL(KTO)%XEFIELDV !Done in FIELDLIST_GOTO_MODEL
+!XEFIELDW=>ELEC_MODEL(KTO)%XEFIELDW !Done in FIELDLIST_GOTO_MODEL
 XESOURCEFW=>ELEC_MODEL(KTO)%XESOURCEFW
 XIONSOURCEFW=>ELEC_MODEL(KTO)%XIONSOURCEFW
 XCION_POS_FW=>ELEC_MODEL(KTO)%XCION_POS_FW
diff --git a/src/MNH/modd_hurr_fieldn.f90 b/src/MNH/modd_hurr_fieldn.f90
index 736c71c97357e221276a1b92ca143d678e78c61a..c770451068d7fd3408a2f54828eed0ce15a94b46 100644
--- a/src/MNH/modd_hurr_fieldn.f90
+++ b/src/MNH/modd_hurr_fieldn.f90
@@ -46,75 +46,21 @@
 USE MODD_PARAMETERS, ONLY: JPMODELMAX
 IMPLICIT NONE
 
-TYPE HURR_FIELD_t
-!
-  REAL, DIMENSION(:,:,:), POINTER :: XUTOT=>NULL(),XVTOT=>NULL(),XTTOT=>NULL()   ! Total fields
-  REAL, DIMENSION(:,:),   POINTER :: XPTOT=>NULL()
-!
-  REAL, DIMENSION(:,:,:), POINTER :: XUENV=>NULL(),XVENV=>NULL(),XTENV=>NULL()  !  Environmental
-  REAL, DIMENSION(:,:),   POINTER :: XPENV=>NULL()              ! fields
-!
-  REAL, DIMENSION(:,:,:), POINTER :: XUBASIC=>NULL(),XVBASIC=>NULL(),XTBASIC=>NULL() ! Basic
-  REAL, DIMENSION(:,:,:), POINTER :: XPBASIC=>NULL()                 !fields
-!
-  REAL, DIMENSION(:,:,:), POINTER :: XVTDIS=>NULL() ! Total disturbance
-                                                   !tangential wind
-!
-  REAL, DIMENSION(:,:,:), POINTER :: XQTOT=>NULL(),XQENV=>NULL(),XQBASIC=>NULL()
-END TYPE HURR_FIELD_t
-
-TYPE(HURR_FIELD_t), DIMENSION(JPMODELMAX), TARGET, SAVE :: HURR_FIELD_MODEL
-
-REAL, DIMENSION(:,:,:), POINTER :: XUTOT=>NULL(),XVTOT=>NULL(),XTTOT=>NULL()
+REAL, DIMENSION(:,:,:), POINTER :: XUTOT=>NULL(),XVTOT=>NULL(),XTTOT=>NULL()       ! Total fields
 REAL, DIMENSION(:,:),   POINTER :: XPTOT=>NULL()
-REAL, DIMENSION(:,:,:), POINTER :: XUENV=>NULL(),XVENV=>NULL(),XTENV=>NULL()
+REAL, DIMENSION(:,:,:), POINTER :: XUENV=>NULL(),XVENV=>NULL(),XTENV=>NULL()       !  Environmental fields
 REAL, DIMENSION(:,:),   POINTER :: XPENV=>NULL()
-REAL, DIMENSION(:,:,:), POINTER :: XUBASIC=>NULL(),XVBASIC=>NULL(),XTBASIC=>NULL()
+REAL, DIMENSION(:,:,:), POINTER :: XUBASIC=>NULL(),XVBASIC=>NULL(),XTBASIC=>NULL() ! Basic fields
 REAL, DIMENSION(:,:,:), POINTER :: XPBASIC=>NULL()
-REAL, DIMENSION(:,:,:), POINTER :: XVTDIS=>NULL()
-  REAL, DIMENSION(:,:,:), POINTER :: XQTOT=>NULL(),XQENV=>NULL(),XQBASIC=>NULL()
+REAL, DIMENSION(:,:,:), POINTER :: XVTDIS=>NULL()                                  ! Total disturbance tangential wind
+REAL, DIMENSION(:,:,:), POINTER :: XQTOT=>NULL(),XQENV=>NULL(),XQBASIC=>NULL()
 
 CONTAINS
 
 SUBROUTINE HURR_FIELD_GOTO_MODEL(KFROM, KTO)
-INTEGER, INTENT(IN) :: KFROM, KTO
 !
-! Save current state for allocated arrays
-HURR_FIELD_MODEL(KFROM)%XUTOT=>XUTOT
-HURR_FIELD_MODEL(KFROM)%XVTOT=>XVTOT
-HURR_FIELD_MODEL(KFROM)%XTTOT=>XTTOT
-HURR_FIELD_MODEL(KFROM)%XPTOT=>XPTOT
-HURR_FIELD_MODEL(KFROM)%XUENV=>XUENV
-HURR_FIELD_MODEL(KFROM)%XVENV=>XVENV
-HURR_FIELD_MODEL(KFROM)%XTENV=>XTENV
-HURR_FIELD_MODEL(KFROM)%XPENV=>XPENV
-HURR_FIELD_MODEL(KFROM)%XUBASIC=>XUBASIC
-HURR_FIELD_MODEL(KFROM)%XVBASIC=>XVBASIC
-HURR_FIELD_MODEL(KFROM)%XTBASIC=>XTBASIC
-HURR_FIELD_MODEL(KFROM)%XPBASIC=>XPBASIC
-HURR_FIELD_MODEL(KFROM)%XVTDIS=>XVTDIS
-HURR_FIELD_MODEL(KFROM)%XQTOT=>XQTOT
-HURR_FIELD_MODEL(KFROM)%XQENV=>XQENV
-HURR_FIELD_MODEL(KFROM)%XQBASIC=>XQBASIC
+INTEGER, INTENT(IN) :: KFROM, KTO
 !
-! Current model is set to model KTO
-XUTOT=>HURR_FIELD_MODEL(KTO)%XUTOT
-XVTOT=>HURR_FIELD_MODEL(KTO)%XVTOT
-XTTOT=>HURR_FIELD_MODEL(KTO)%XTTOT
-XPTOT=>HURR_FIELD_MODEL(KTO)%XPTOT
-XUENV=>HURR_FIELD_MODEL(KTO)%XUENV
-XVENV=>HURR_FIELD_MODEL(KTO)%XVENV
-XTENV=>HURR_FIELD_MODEL(KTO)%XTENV
-XPENV=>HURR_FIELD_MODEL(KTO)%XPENV
-XUBASIC=>HURR_FIELD_MODEL(KTO)%XUBASIC
-XVBASIC=>HURR_FIELD_MODEL(KTO)%XVBASIC
-XTBASIC=>HURR_FIELD_MODEL(KTO)%XTBASIC
-XPBASIC=>HURR_FIELD_MODEL(KTO)%XPBASIC
-XVTDIS=>HURR_FIELD_MODEL(KTO)%XVTDIS
-XQTOT=>HURR_FIELD_MODEL(KTO)%XQTOT
-XQENV=>HURR_FIELD_MODEL(KTO)%XQENV
-XQBASIC=>HURR_FIELD_MODEL(KTO)%XQBASIC
-
 END SUBROUTINE HURR_FIELD_GOTO_MODEL
 
 END MODULE MODD_HURR_FIELD_n
diff --git a/src/MNH/modd_lima_precip_scavengingn.f90 b/src/MNH/modd_lima_precip_scavengingn.f90
index a0866da9d6041ab3a6dedaef08223e9196d63d7a..188efc6e70aa51e8bc6474696a77a25209d32f83 100644
--- a/src/MNH/modd_lima_precip_scavengingn.f90
+++ b/src/MNH/modd_lima_precip_scavengingn.f90
@@ -29,30 +29,15 @@ USE MODD_PARAMETERS, ONLY: JPMODELMAX
 !
 IMPLICIT NONE
 !
-TYPE LIMA_PRECIP_SCAVENGING_t
-   REAL, DIMENSION(:,:), POINTER :: XINPAP=>NULL(), XACPAP=>NULL()
+REAL, DIMENSION(:,:), POINTER :: XINPAP=>NULL(), XACPAP=>NULL()
                                          ! Instant and cumul of ground
                                          ! precipitation fields of Scavenged
                                          ! Aerosol Particles
-END TYPE LIMA_PRECIP_SCAVENGING_t
-
-TYPE(LIMA_PRECIP_SCAVENGING_t), DIMENSION(JPMODELMAX), TARGET, SAVE :: PRECIP_SCAVENGING_MODEL
-
-REAL, DIMENSION(:,:), POINTER :: XINPAP=>NULL(), XACPAP=>NULL()
 
 CONTAINS
 
 SUBROUTINE LIMA_PRECIP_SCAVENGING_GOTO_MODEL(KFROM, KTO)
   INTEGER, INTENT(IN) :: KFROM, KTO
-  !
-  ! Save current state for allocated arrays
-  PRECIP_SCAVENGING_MODEL(KFROM)%XINPAP=>XINPAP
-  PRECIP_SCAVENGING_MODEL(KFROM)%XACPAP=>XACPAP
-  !
-  ! Current model is set to model KTO
-  XINPAP=>PRECIP_SCAVENGING_MODEL(KTO)%XINPAP
-  XACPAP=>PRECIP_SCAVENGING_MODEL(KTO)%XACPAP
-  !
 END SUBROUTINE LIMA_PRECIP_SCAVENGING_GOTO_MODEL
 !
 !
diff --git a/src/MNH/modd_spawn.f90 b/src/MNH/modd_spawn.f90
index 1e61f69b440d4d8c6165ebada9157fdc455a07c7..3f429668d0514b13f4c8c2e1ee248d544a363848 100644
--- a/src/MNH/modd_spawn.f90
+++ b/src/MNH/modd_spawn.f90
@@ -66,44 +66,48 @@ 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,                 SAVE,POINTER :: XLEN11
-REAL,                 SAVE,POINTER :: XLEN21
-REAL,DIMENSION(:,:,:),SAVE,POINTER :: XTHT1
-REAL,DIMENSION(:,:,:),SAVE,POINTER :: XTKET1
-REAL,DIMENSION(:,:,:),SAVE,POINTER :: XPABST1
-REAL,DIMENSION(:,:,:,:),SAVE,POINTER :: XRT1
-REAL,DIMENSION(:,:,:),SAVE,POINTER :: XUT1
-REAL,DIMENSION(:,:,:),SAVE,POINTER :: XVT1
-REAL,DIMENSION(:,:,:),SAVE,POINTER :: XWT1
-REAL,DIMENSION(:,:,:),SAVE,POINTER :: XSRCT1
-REAL,DIMENSION(:,:,:),SAVE,POINTER :: XSIGS1
-TYPE(DATE_TIME),      SAVE,POINTER :: TDTCUR1
-REAL,DIMENSION(:,:,:),SAVE,POINTER :: XLSUM1
-REAL,DIMENSION(:,:,:),SAVE,POINTER :: XLSVM1
-REAL,DIMENSION(:,:,:),SAVE,POINTER :: XLSWM1
-REAL,DIMENSION(:,:,:),SAVE,POINTER :: XLSTHM1
-REAL,DIMENSION(:,:,:),SAVE,POINTER :: XLSRVM1
+REAL,DIMENSION(:),    SAVE,POINTER :: XXHAT1  => NULL()
+REAL,DIMENSION(:),    SAVE,POINTER :: XYHAT1  => NULL()
+REAL,DIMENSION(:),    SAVE,POINTER :: XZHAT1  => NULL()
+REAL,DIMENSION(:,:),  SAVE,POINTER :: XZS1    => NULL()
+REAL,DIMENSION(:,:),  SAVE,POINTER :: XZSMT1  => NULL()
+REAL,DIMENSION(:,:,:),SAVE,POINTER :: XZZ1    => NULL()
+LOGICAL,              SAVE,POINTER :: LSLEVE1 => NULL()
+REAL,                 SAVE,POINTER :: XLEN11  => NULL()
+REAL,                 SAVE,POINTER :: XLEN21  => NULL()
+REAL,DIMENSION(:,:,:),SAVE,POINTER :: XTHT1   => NULL()
+REAL,DIMENSION(:,:,:),SAVE,POINTER :: XTKET1  => NULL()
+REAL,DIMENSION(:,:,:),SAVE,POINTER :: XPABST1 => NULL()
+REAL,DIMENSION(:,:,:,:),SAVE,POINTER :: XRT1  => NULL()
+REAL,DIMENSION(:,:,:),SAVE,POINTER :: XUT1    => NULL()
+REAL,DIMENSION(:,:,:),SAVE,POINTER :: XVT1    => NULL()
+REAL,DIMENSION(:,:,:),SAVE,POINTER :: XWT1    => NULL()
+REAL,DIMENSION(:,:,:),SAVE,POINTER :: XSRCT1  => NULL()
+REAL,DIMENSION(:,:,:),SAVE,POINTER :: XSIGS1  => NULL()
+TYPE(DATE_TIME),      SAVE,POINTER :: TDTCUR1 => NULL()
+REAL,DIMENSION(:,:,:),SAVE,POINTER :: XLSUM1  => NULL()
+REAL,DIMENSION(:,:,:),SAVE,POINTER :: XLSVM1  => NULL()
+REAL,DIMENSION(:,:,:),SAVE,POINTER :: XLSWM1  => NULL()
+REAL,DIMENSION(:,:,:),SAVE,POINTER :: XLSTHM1 => NULL()
+REAL,DIMENSION(:,:,:),SAVE,POINTER :: XLSRVM1 => NULL()
 !
-REAL,DIMENSION(:,:),  SAVE,POINTER :: XINPRC1
-REAL,DIMENSION(:,:),  SAVE,POINTER :: XACPRC1
-REAL,DIMENSION(:,:),  SAVE,POINTER :: XINDEP1
-REAL,DIMENSION(:,:),  SAVE,POINTER :: XACDEP1
-REAL,DIMENSION(:,:),  SAVE,POINTER :: XINPRR1
-REAL,DIMENSION(:,:,:),SAVE,POINTER :: XINPRR3D1
-REAL,DIMENSION(:,:,:),SAVE,POINTER :: XEVAP3D1
-REAL,DIMENSION(:,:),  SAVE,POINTER :: XACPRR1
-REAL,DIMENSION(:,:),  SAVE,POINTER :: XINPRS1
-REAL,DIMENSION(:,:),  SAVE,POINTER :: XACPRS1
-REAL,DIMENSION(:,:),  SAVE,POINTER :: XINPRG1
-REAL,DIMENSION(:,:),  SAVE,POINTER :: XACPRG1
-REAL,DIMENSION(:,:),  SAVE,POINTER :: XINPRH1
-REAL,DIMENSION(:,:),  SAVE,POINTER :: XACPRH1
+REAL,DIMENSION(:,:),  SAVE,POINTER :: XINPRC1   => NULL()
+REAL,DIMENSION(:,:),  SAVE,POINTER :: XACPRC1   => NULL()
+REAL,DIMENSION(:,:),  SAVE,POINTER :: XINDEP1   => NULL()
+REAL,DIMENSION(:,:),  SAVE,POINTER :: XACDEP1   => NULL()
+REAL,DIMENSION(:,:),  SAVE,POINTER :: XINPRR1   => NULL()
+REAL,DIMENSION(:,:,:),SAVE,POINTER :: XINPRR3D1 => NULL()
+REAL,DIMENSION(:,:,:),SAVE,POINTER :: XEVAP3D1  => NULL()
+REAL,DIMENSION(:,:),  SAVE,POINTER :: XACPRR1   => NULL()
+REAL,DIMENSION(:,:),  SAVE,POINTER :: XINPRS1   => NULL()
+REAL,DIMENSION(:,:),  SAVE,POINTER :: XACPRS1   => NULL()
+REAL,DIMENSION(:,:),  SAVE,POINTER :: XINPRG1   => NULL()
+REAL,DIMENSION(:,:),  SAVE,POINTER :: XACPRG1   => NULL()
+REAL,DIMENSION(:,:),  SAVE,POINTER :: XINPRH1   => NULL()
+REAL,DIMENSION(:,:),  SAVE,POINTER :: XACPRH1   => NULL()
+!
+REAL,DIMENSION(:,:,:),SAVE,POINTER :: XVU_FLUX_M1  => NULL()
+REAL,DIMENSION(:,:,:),SAVE,POINTER :: XVTH_FLUX_M1 => NULL()
+REAL,DIMENSION(:,:,:),SAVE,POINTER :: XWTH_FLUX_M1 => NULL()
 !
 END MODULE MODD_SPAWN
diff --git a/src/MNH/modd_turbn.f90 b/src/MNH/modd_turbn.f90
index a6ef1675817db72182c08c4fdd58a7f366849c3d..b791a8e175b8e6c56b57badac484c6cfabf6c678 100644
--- a/src/MNH/modd_turbn.f90
+++ b/src/MNH/modd_turbn.f90
@@ -81,8 +81,8 @@ TYPE TURB_t
                                   ! 'NONE' none
                                   ! 'TM06' Tomas Masson 2006
   CHARACTER(LEN=4)   :: CSUBG_AUCV ! type of subgrid autoconv. method
-  REAL, DIMENSION(:,:), POINTER :: XBL_DEPTH=>NULL() ! BL depth for TOMS computations
-  REAL, DIMENSION(:,:), POINTER :: XSBL_DEPTH=>NULL()! SurfaceBL depth for RMC01 computations
+!  REAL, DIMENSION(:,:), POINTER :: XBL_DEPTH=>NULL() ! BL depth for TOMS computations
+!  REAL, DIMENSION(:,:), POINTER :: XSBL_DEPTH=>NULL()! SurfaceBL depth for RMC01 computations
 !  REAL, DIMENSION(:,:,:), POINTER :: XWTHVMF=>NULL()! Mass Flux vert. transport of buoyancy
   REAL               :: VSIGQSAT  ! coeff applied to qsat variance contribution
   REAL, DIMENSION(:,:,:), POINTER :: XDYP=>NULL()    ! Dynamical production of Kinetic energy
@@ -124,8 +124,8 @@ INTEGER, INTENT(IN) :: KFROM, KTO
 !
 ! Save current state for allocated arrays
 !
-TURB_MODEL(KFROM)%XBL_DEPTH=>XBL_DEPTH
-TURB_MODEL(KFROM)%XSBL_DEPTH=>XSBL_DEPTH
+!TURB_MODEL(KFROM)%XBL_DEPTH=>XBL_DEPTH !Done in FIELDLIST_GOTO_MODEL
+!TURB_MODEL(KFROM)%XSBL_DEPTH=>XSBL_DEPTH !Done in FIELDLIST_GOTO_MODEL
 !TURB_MODEL(KFROM)%XWTHVMF=>XWTHVMF !Done in FIELDLIST_GOTO_MODEL
 TURB_MODEL(KFROM)%XDYP=>XDYP 
 TURB_MODEL(KFROM)%XTHP=>XTHP 
@@ -146,8 +146,8 @@ LSIG_CONV=>TURB_MODEL(KTO)%LSIG_CONV
 LRMC01=>TURB_MODEL(KTO)%LRMC01
 CTOM=>TURB_MODEL(KTO)%CTOM
 CSUBG_AUCV=>TURB_MODEL(KTO)%CSUBG_AUCV
-XBL_DEPTH=>TURB_MODEL(KTO)%XBL_DEPTH
-XSBL_DEPTH=>TURB_MODEL(KTO)%XSBL_DEPTH
+!XBL_DEPTH=>TURB_MODEL(KTO)%XBL_DEPTH !Done in FIELDLIST_GOTO_MODEL
+!XSBL_DEPTH=>TURB_MODEL(KTO)%XSBL_DEPTH !Done in FIELDLIST_GOTO_MODEL
 !XWTHVMF=>TURB_MODEL(KTO)%XWTHVMF !Done in FIELDLIST_GOTO_MODEL
 VSIGQSAT=>TURB_MODEL(KTO)%VSIGQSAT
 XDYP=>TURB_MODEL(KTO)%XDYP 
diff --git a/src/MNH/spawn_field2.f90 b/src/MNH/spawn_field2.f90
index 563f2ba4dbe4b2e96bc5d17ad4fff340bbcf5ef8..d5f9fb857ab4d37cb6dfca2671fd7edc54a19a9c 100644
--- a/src/MNH/spawn_field2.f90
+++ b/src/MNH/spawn_field2.f90
@@ -191,8 +191,6 @@ USE MODD_RELFRC_n
 USE MODD_2D_FRC
 !
 USE MODD_LATZ_EDFLX
-USE MODD_DEF_EDDY_FLUX_n           
-USE MODD_DEF_EDDYUV_FLUX_n
 !
 USE MODE_MPPDB
 USE MODE_ll
@@ -389,12 +387,12 @@ CALL MPPDB_CHECK3D(PVT,"SPAWN_FIELD2:PVT",PRECISION)
 !*       2.1.8  Turbulent fluxes for 2D (Modif MT)                                    
 !
   IF (LUV_FLX) THEN
-    PVU_FLUX_M(:,:,:)= EDDYUV_FLUX_MODEL(1)%XVU_FLUX_M (KXOR:KXEND,KYOR:KYEND,:)
+    PVU_FLUX_M(:,:,:)= XVU_FLUX_M1 (KXOR:KXEND,KYOR:KYEND,:)
   END IF
 !
   IF (LTH_FLX) THEN
-    PVTH_FLUX_M(:,:,:)= EDDY_FLUX_MODEL(1)%XVTH_FLUX_M (KXOR:KXEND,KYOR:KYEND,:)
-    PWTH_FLUX_M(:,:,:)= EDDY_FLUX_MODEL(1)%XWTH_FLUX_M (KXOR:KXEND,KYOR:KYEND,:)
+    PVTH_FLUX_M(:,:,:)= XVTH_FLUX_M1 (KXOR:KXEND,KYOR:KYEND,:)
+    PWTH_FLUX_M(:,:,:)= XWTH_FLUX_M1 (KXOR:KXEND,KYOR:KYEND,:)
   END IF
 !
 !-------------------------------------------------------------------------------
@@ -490,10 +488,10 @@ ELSE
       CALL SET_LSFIELD_1WAY_ll(XSIGS1(:,:,JI),ZSIGS_C(:,:,JI),2)
     ENDIF
     IF (LUV_FLX)                                    &
-      CALL SET_LSFIELD_1WAY_ll(EDDYUV_FLUX_MODEL(1)%XVU_FLUX_M(:,:,JI),ZVU_FLUX_M_C(:,:,JI),2)
+      CALL SET_LSFIELD_1WAY_ll(XVU_FLUX_M1(:,:,JI),ZVU_FLUX_M_C(:,:,JI),2)
     IF (LTH_FLX) THEN
-      CALL SET_LSFIELD_1WAY_ll(EDDY_FLUX_MODEL(1)%XVTH_FLUX_M(:,:,JI),ZVTH_FLUX_M_C(:,:,JI),2)
-      CALL SET_LSFIELD_1WAY_ll(EDDY_FLUX_MODEL(1)%XWTH_FLUX_M(:,:,JI),ZWTH_FLUX_M_C(:,:,JI),2) 
+      CALL SET_LSFIELD_1WAY_ll(XVTH_FLUX_M1(:,:,JI),ZVTH_FLUX_M_C(:,:,JI),2)
+      CALL SET_LSFIELD_1WAY_ll(XWTH_FLUX_M1(:,:,JI),ZWTH_FLUX_M_C(:,:,JI),2) 
     ENDIF
     !
     CALL LS_FORCING_ll(2, IINFO_ll, .TRUE.)
diff --git a/src/MNH/spawning.f90 b/src/MNH/spawning.f90
index e835499141e1e13ea3e540b8128f2181cc79b537..e9a817722aaf712d7958ba2dd25dda242a8a6d5e 100644
--- a/src/MNH/spawning.f90
+++ b/src/MNH/spawning.f90
@@ -261,8 +261,11 @@ END SUBROUTINE UPDATE_MODD_FROM_NMLVAR
 
 SUBROUTINE SET_POINTERS_TO_MODEL1()
 !
+USE MODD_DEF_EDDY_FLUX_n
+USE MODD_DEF_EDDYUV_FLUX_n
 USE MODD_FIELD_n
 USE MODD_GRID_n
+USE MODD_LATZ_EDFLX
 USE MODD_PRECIP_n
 !
 XXHAT1 => XXHAT
@@ -304,7 +307,14 @@ XINPRG1 => XINPRG
 XACPRG1 => XACPRG
 XINPRH1 => XINPRH
 XACPRH1 => XACPRH
-
+!
+IF (LUV_FLX) THEN
+  XVU_FLUX_M1  => XVU_FLUX_M
+END IF
+IF (LTH_FLX) THEN
+  XVTH_FLUX_M1 => XVTH_FLUX_M
+  XWTH_FLUX_M1 => XWTH_FLUX_M1
+END IF
 !
 END SUBROUTINE SET_POINTERS_TO_MODEL1
 !
diff --git a/src/MNH/write_lbn.f90 b/src/MNH/write_lbn.f90
index 8d98c2183394171e8ed386be7b171dcca0374588..66e791e5fd33e3fba791bc80843abadba7c56be4 100644
--- a/src/MNH/write_lbn.f90
+++ b/src/MNH/write_lbn.f90
@@ -399,23 +399,32 @@ IF (NSV >=1) THEN
 !
 ! ELEC
 !
-  DO JSV = NSV_ELECBEG,NSV_ELECEND
-    IF(NSIZELBXSV_ll /= 0) THEN
-      YRECFM='LBX_'//TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))
-      WRITE(YCOMMENT,'(A6,A6,I3.3,A8)')'2_Y_Z_','LBXSVM',JSV,' (KG/KG)'
-      ILENCH=LEN(YCOMMENT)
-      CALL FMWRIT_LB(YFMFILE,YRECFM,CLUOUT,"LBX",XLBXSVM(:,:,:,JSV),IRIMX,NSIZELBXSV_ll,&
-           & IGRID,ILENCH,YCOMMENT,IRESP)
-    END IF
+  IF (NSV_ELECEND>=NSV_ELECBEG) THEN
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CUNITS     = 'kg kg-1'
+    TZFIELD%CDIR       = '--'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 3
+    !
+    DO JSV = NSV_ELECBEG,NSV_ELECEND
+      IF(NSIZELBXSV_ll /= 0) THEN
+        TZFIELD%CMNHNAME   = 'LBX_'//TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))
+        TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+        TZFIELD%CLBTYPE    = 'LBX'
+        WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
+        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,CLUOUT,NSIZELBXSV_ll,IRESP,XLBXSVM(:,:,:,JSV))
+      END IF
 !
-    IF(NSIZELBYSV_ll /= 0) THEN
-      YRECFM='LBY_'//TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))
-      WRITE(YCOMMENT,'(A6,A6,I3.3,A8)')'X_2_Z_','LBYSVM',JSV,' (KG/KG)'
-      ILENCH=LEN(YCOMMENT)
-      CALL FMWRIT_LB(YFMFILE,YRECFM,CLUOUT,"LBY",XLBYSVM(:,:,:,JSV),IRIMY,NSIZELBYSV_ll,&
-           & IGRID,ILENCH,YCOMMENT,IRESP)
-    END IF
-  END DO
+      IF(NSIZELBYSV_ll /= 0) THEN
+        TZFIELD%CMNHNAME   = 'LBY_'//TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))
+        TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+        TZFIELD%CLBTYPE    = 'LBY'
+        WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
+        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,CLUOUT,NSIZELBYSV_ll,IRESP,XLBYSVM(:,:,:,JSV))
+      END IF
+    END DO
+  END IF
   !
   !
   IF (LORILAM) THEN
@@ -826,23 +835,32 @@ IF (NSV >=1) THEN
   ENDIF   
 !
   ! lagrangian variables
-  DO JSV = NSV_LGBEG,NSV_LGEND
-    IF(NSIZELBXSV_ll /= 0) THEN
-      YRECFM = 'LBX_'//TRIM(CLGNAMES(JSV-NSV_LGBEG+1))
-      WRITE(YCOMMENT,'(A6,A6,I3.3,A8)')'2_Y_Z_','LBXSVM',JSV,' (M)'
-      ILENCH=LEN(YCOMMENT)
-      CALL FMWRIT_LB(YFMFILE,YRECFM,CLUOUT,"LBX",XLBXSVM(:,:,:,JSV),IRIMX,NSIZELBXSV_ll,&
-           & IGRID,ILENCH,YCOMMENT,IRESP)
-    END IF
+  IF (NSV_LGEND>=NSV_LGBEG) THEN
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CUNITS     = 'm'
+    TZFIELD%CDIR       = '--'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 3
+    !
+    DO JSV = NSV_LGBEG,NSV_LGEND
+      IF(NSIZELBXSV_ll /= 0) THEN
+        TZFIELD%CMNHNAME   = 'LBX_'//TRIM(CLGNAMES(JSV-NSV_LGBEG+1))
+        TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+        TZFIELD%CLBTYPE    = 'LBX'
+        WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
+        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,CLUOUT,NSIZELBXSV_ll,IRESP,XLBXSVM(:,:,:,JSV))
+      END IF
 !
-    IF(NSIZELBYSV_ll /= 0) THEN
-      YRECFM = 'LBY_'//TRIM(CLGNAMES(JSV-NSV_LGBEG+1))
-      WRITE(YCOMMENT,'(A6,A6,I3.3,A8)')'X_2_Z_','LBYSVM',JSV,' (M)'
-      ILENCH=LEN(YCOMMENT)
-      CALL FMWRIT_LB(YFMFILE,YRECFM,CLUOUT,"LBY",XLBYSVM(:,:,:,JSV),IRIMY,NSIZELBYSV_ll,&
-           & IGRID,ILENCH,YCOMMENT,IRESP)
-    END IF
-  END DO
+      IF(NSIZELBYSV_ll /= 0) THEN
+        TZFIELD%CMNHNAME   = 'LBY_'//TRIM(CLGNAMES(JSV-NSV_LGBEG+1))
+        TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+        TZFIELD%CLBTYPE    = 'LBY'
+        WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
+        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,CLUOUT,NSIZELBYSV_ll,IRESP,XLBYSVM(:,:,:,JSV))
+      END IF
+    END DO
+  END IF
   ! passive pollutants  
   DO JSV = NSV_PPBEG,NSV_PPEND
     TZFIELD%CSTDNAME   = ''
diff --git a/src/MNH/write_lfin.f90 b/src/MNH/write_lfin.f90
index 87e61abbfa21c03673b6ca98a2fe7894a09c88e4..5b553a417f9f8380875859f573719dfbfb418214 100644
--- a/src/MNH/write_lfin.f90
+++ b/src/MNH/write_lfin.f90
@@ -279,15 +279,7 @@ TYPE(TFILEDATA),   INTENT(IN) :: TPFILE ! File characteristics
 INTEGER           :: ILUOUT         ! logical unit
 INTEGER           :: IRESP          ! IRESP  : return-code if a problem appears 
                                     !in LFI subroutines at the open of the file              
-INTEGER           :: IGRID          ! IGRID : grid indicator
-INTEGER           :: ILENCH         ! ILENCH : length of comment string 
 !
-CHARACTER(LEN=28) :: YFMFILE        ! Name of FM-file to write
-CHARACTER(LEN=16) :: YRECFM         ! Name of the article to be written
-CHARACTER(LEN=100):: YCOMMENT       ! Comment string
-CHARACTER (LEN=2) :: YDIR           ! Type of the data field
-!
-INTEGER           :: IRR            ! Index for moist variables
 INTEGER           :: JSV            ! loop index for scalar variables
 INTEGER           :: JSA            ! beginning of chemical-aerosol variables
 
@@ -331,8 +323,6 @@ CALL FMLOOK_ll(CLUOUT,CLUOUT,ILUOUT,IRESP)
 ALLOCATE(ZWORK2D(SIZE(XTHT,1),SIZE(XTHT,2)))
 ALLOCATE(ZWORK3D(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)))
 !
-YFMFILE = TPFILE%CNAME
-!
 !*       0.2     ARRAYS BOUNDS INITIALIZATION
 !
 IIU=NIMAX+2*JPHEXT
@@ -345,7 +335,7 @@ IKE=IKU-JPVEXT
 !*       1.     WRITES IN THE LFI FILE
 ! 
 !
-!*       1.0    YFMFILE and HDADFILE writing :
+!*       1.0    File and HDADFILE writing :
 !
 CALL IO_WRITE_FIELD(TPFILE,'FILETYPE',CLUOUT,IRESP,TPFILE%CTYPE)
 !
@@ -480,143 +470,154 @@ IF ( (CUVW_ADV_SCHEME == 'CEN4TH') .AND. (CTEMP_SCHEME == 'LEFR') ) THEN
   CALL IO_WRITE_FIELD(TPFILE,'DWM',CLUOUT,IRESP,XDWM)
 END IF
 !
-YDIR='XY'
-!
 IF (MEAN_COUNT /= 0) THEN
 !
-  YRECFM='UMME'
-  YCOMMENT='X_Y_Z_U component of mean wind (m/s)'
-  IGRID=2
-  ILENCH=LEN(YCOMMENT)
+  TZFIELD%CSTDNAME   = ''
+  TZFIELD%CDIR       = 'XY'
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 3
+!
+  TZFIELD%NGRID      = 2
+!
+  TZFIELD%CMNHNAME   = 'UMME'
+  TZFIELD%CLONGNAME  = 'MesoNH: UMME'
+  TZFIELD%CUNITS     = 'm s-1'
+  TZFIELD%CCOMMENT   = 'X_Y_Z_U component of mean wind'
   ZWORK3D = XUM_MEAN/MEAN_COUNT
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP)
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK3D)
 !
-  YRECFM='U2ME'
-  YCOMMENT='X_Y_Z_U component of mean wind variance(m2/s2)'
-  IGRID=2
-  ILENCH=LEN(YCOMMENT)
+  TZFIELD%CMNHNAME   = 'U2ME'
+  TZFIELD%CLONGNAME  = 'MesoNH: U2ME'
+  TZFIELD%CUNITS     = 'm2 s-2'
+  TZFIELD%CCOMMENT   = 'X_Y_Z_U component of mean wind variance'
   ZWORK3D = XU2_MEAN/MEAN_COUNT-XUM_MEAN**2/MEAN_COUNT**2
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP)
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK3D)
   !
-  YRECFM='UMMA'
-  YCOMMENT='X_Y_Z_U component of max wind (m/s)'
-  IGRID=2
-  ILENCH=LEN(YCOMMENT)
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XUM_MAX,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-  YRECFM='VMME'
-  YCOMMENT='X_Y_Z_V component of mean wind (m/s)'
-  IGRID=3
-  ILENCH=LEN(YCOMMENT)
+  TZFIELD%CMNHNAME   = 'UMMA'
+  TZFIELD%CLONGNAME  = 'MesoNH: UMMA'
+  TZFIELD%CUNITS     = 'm s-1'
+  TZFIELD%CCOMMENT   = 'X_Y_Z_U component of max wind'
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XUM_MAX)
+!
+  TZFIELD%NGRID      = 3
+!
+  TZFIELD%CMNHNAME   = 'VMME'
+  TZFIELD%CLONGNAME  = 'MesoNH: VMME'
+  TZFIELD%CUNITS     = 'm s-1'
+  TZFIELD%CCOMMENT   = 'X_Y_Z_V component of mean wind'
   ZWORK3D = XVM_MEAN/MEAN_COUNT
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP)
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK3D)
 !
-  YRECFM='V2ME'
-  YCOMMENT='X_Y_Z_V component of mean wind variance (m2/s2)'
-  IGRID=3
-  ILENCH=LEN(YCOMMENT)
+  TZFIELD%CMNHNAME   = 'V2ME'
+  TZFIELD%CLONGNAME  = 'MesoNH: V2ME'
+  TZFIELD%CUNITS     = 'm2 s-2'
+  TZFIELD%CCOMMENT   = 'X_Y_Z_V component of mean wind variance'
   ZWORK3D = XV2_MEAN/MEAN_COUNT-XVM_MEAN**2/MEAN_COUNT**2
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP)
-  !
-  YRECFM='VMMA'
-  YCOMMENT='X_Y_Z_V component of max wind (m/s)'
-  IGRID=3
-  ILENCH=LEN(YCOMMENT)
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XVM_MAX,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-  YRECFM='WMME'
-  YCOMMENT='X_Y_Z_vertical mean wind (m/s)'
-  IGRID=4
-  ILENCH=LEN(YCOMMENT)
- ZWORK3D = XWM_MEAN/MEAN_COUNT
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP)
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK3D)
   !
-  YRECFM='W2ME'
-  YCOMMENT='X_Y_Z_vertical mean wind  variance(m2/s2)'
-  IGRID=4
-  ILENCH=LEN(YCOMMENT)
+  TZFIELD%CMNHNAME   = 'VMMA'
+  TZFIELD%CLONGNAME  = 'MesoNH: VMMA'
+  TZFIELD%CUNITS     = 'm s-1'
+  TZFIELD%CCOMMENT   = 'X_Y_Z_V component of max wind'
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XVM_MAX)
+!
+  TZFIELD%NGRID      = 4
+!
+  TZFIELD%CMNHNAME   = 'WMME'
+  TZFIELD%CLONGNAME  = 'MesoNH: WMME'
+  TZFIELD%CUNITS     = 'm s-1'
+  TZFIELD%CCOMMENT   = 'X_Y_Z_vertical mean wind'
+  ZWORK3D = XWM_MEAN/MEAN_COUNT
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK3D)
+!
+  TZFIELD%CMNHNAME   = 'W2ME'
+  TZFIELD%CLONGNAME  = 'MesoNH: W2ME'
+  TZFIELD%CUNITS     = 'm2 s-2'
+  TZFIELD%CCOMMENT   = 'X_Y_Z_vertical mean wind variance'
   ZWORK3D = XW2_MEAN/MEAN_COUNT-XWM_MEAN**2/MEAN_COUNT**2
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-  YRECFM='WMMA'
-  YCOMMENT='X_Y_Z_vertical max wind (m/s)'
-  IGRID=4
-  ILENCH=LEN(YCOMMENT)
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XWM_MAX,IGRID,ILENCH,YCOMMENT,IRESP)
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK3D)
   !
-  YRECFM='THMME'
-  YCOMMENT='X_Y_Z_mean potential temperature (K)'
-  IGRID=1
-  ILENCH=LEN(YCOMMENT)
+  TZFIELD%CMNHNAME   = 'WMMA'
+  TZFIELD%CLONGNAME  = 'MesoNH: WMMA'
+  TZFIELD%CUNITS     = 'm s-1'
+  TZFIELD%CCOMMENT   = 'X_Y_Z_vertical max wind'
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XWM_MAX)
+!
+  TZFIELD%NGRID      = 1
+!
+  TZFIELD%CMNHNAME   = 'THMME'
+  TZFIELD%CLONGNAME  = 'MesoNH: THMME'
+  TZFIELD%CUNITS     = 'K'
+  TZFIELD%CCOMMENT   = 'X_Y_Z_mean potential temperature'
   ZWORK3D = XTHM_MEAN/MEAN_COUNT
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP)
-  !
-  YRECFM='TH2ME'
-  YCOMMENT='X_Y_Z_mean potential temperature variance (K2)'
-  IGRID=1
-  ILENCH=LEN(YCOMMENT)
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK3D)
+!
+  TZFIELD%CMNHNAME   = 'TH2ME'
+  TZFIELD%CLONGNAME  = 'MesoNH: TH2ME'
+  TZFIELD%CUNITS     = 'K2'
+  TZFIELD%CCOMMENT   = 'X_Y_Z_mean potential temperature variance'
   ZWORK3D = XTH2_MEAN/MEAN_COUNT-XTHM_MEAN**2/MEAN_COUNT**2
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP)
-  !
-  YRECFM='THMMA'
-  YCOMMENT='X_Y_Z_max potential temperature (K)'
-  IGRID=1
-  ILENCH=LEN(YCOMMENT)
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XTHM_MAX,IGRID,ILENCH,YCOMMENT,IRESP)
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK3D)
   !
-  YRECFM='TEMPMME'
-  YCOMMENT='X_Y_Z_mean temperature (K)'
-  IGRID=1
-  ILENCH=LEN(YCOMMENT)
-  ZWORK3D= XTEMPM_MEAN/MEAN_COUNT
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP)
-  !
-  YRECFM='TEMP2ME'
-  YCOMMENT='X_Y_Z_mean temperature variance (K2)'
-  IGRID=1
-  ILENCH=LEN(YCOMMENT)
+  TZFIELD%CMNHNAME   = 'THMMA'
+  TZFIELD%CLONGNAME  = 'MesoNH: THMMA'
+  TZFIELD%CUNITS     = 'K'
+  TZFIELD%CCOMMENT   = 'X_Y_Z_max potential temperature'
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XTHM_MAX)
+!
+  TZFIELD%CMNHNAME   = 'TEMPMME'
+  TZFIELD%CLONGNAME  = 'MesoNH: TEMPMME'
+  TZFIELD%CUNITS     = 'K'
+  TZFIELD%CCOMMENT   = 'X_Y_Z_mean temperature'
+  ZWORK3D = XTEMPM_MEAN/MEAN_COUNT
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK3D)
+!
+  TZFIELD%CMNHNAME   = 'TEMP2ME'
+  TZFIELD%CLONGNAME  = 'MesoNH: TEMP2ME'
+  TZFIELD%CUNITS     = 'K2'
+  TZFIELD%CCOMMENT   = 'X_Y_Z_mean temperature variance'
   ZWORK3D = XTEMP2_MEAN/MEAN_COUNT-XTEMPM_MEAN**2/MEAN_COUNT**2
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-  YRECFM='TEMPMMA'
-  YCOMMENT='X_Y_Z_max  temperature (K)'
-  IGRID=1
-  ILENCH=LEN(YCOMMENT)
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XTEMPM_MAX,IGRID,ILENCH,YCOMMENT,IRESP)
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK3D)
   !
-  YRECFM='PABSMME'
-  YCOMMENT='X_Y_Z_mean ABSolute Pressure (Pa)'
-  IGRID=1
-  ILENCH=LEN(YCOMMENT)
-  ZWORK3D= XPABSM_MEAN/MEAN_COUNT
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-  YRECFM='PABS2ME'
-  YCOMMENT='X_Y_Z_mean ABSolute Pressure variance(Pa2)'
-  IGRID=1
-  ILENCH=LEN(YCOMMENT)
+  TZFIELD%CMNHNAME   = 'TEMPMMA'
+  TZFIELD%CLONGNAME  = 'MesoNH: TEMPMMA'
+  TZFIELD%CUNITS     = 'K'
+  TZFIELD%CCOMMENT   = 'X_Y_Z_max temperature'
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XTEMPM_MAX)
+!
+  TZFIELD%CMNHNAME   = 'PABSMME'
+  TZFIELD%CLONGNAME  = 'MesoNH: PABSMME'
+  TZFIELD%CUNITS     = 'Pa'
+  TZFIELD%CCOMMENT   = 'X_Y_Z_mean ABSolute Pressure'
+  ZWORK3D = XPABSM_MEAN/MEAN_COUNT
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK3D)
+!
+  TZFIELD%CMNHNAME   = 'PABS2ME'
+  TZFIELD%CLONGNAME  = 'MesoNH: PABS2ME'
+  TZFIELD%CUNITS     = 'Pa2'
+  TZFIELD%CCOMMENT   = 'X_Y_Z_mean ABSolute Pressure variance'
   ZWORK3D = XPABS2_MEAN/MEAN_COUNT-XPABSM_MEAN**2/MEAN_COUNT**2
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-  YRECFM='PABSMMA'
-  YCOMMENT='X_Y_Z_max ABSolute Pressure (Pa)'
-  IGRID=1
-  ILENCH=LEN(YCOMMENT)
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XPABSM_MAX,IGRID,ILENCH,YCOMMENT,IRESP)
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK3D)
+  !
+  TZFIELD%CMNHNAME   = 'PABSMMA'
+  TZFIELD%CLONGNAME  = 'MesoNH: PABSMMA'
+  TZFIELD%CUNITS     = 'Pa'
+  TZFIELD%CCOMMENT   = 'X_Y_Z_max ABSolute Pressure'
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XPABSM_MAX)
 !
   IF (CTURB /= 'NONE') THEN
-    YRECFM='TKEMME'
-    YCOMMENT='X_Y_Z_mean kinetic energy (m2/s2)'
-    IGRID=1
-    ILENCH=LEN(YCOMMENT)
+    TZFIELD%CMNHNAME   = 'TKEMME'
+    TZFIELD%CLONGNAME  = 'MesoNH: TKEMME'
+    TZFIELD%CUNITS     = 'm2 s-2'
+    TZFIELD%CCOMMENT   = 'X_Y_Z_mean kinetic energy'
     ZWORK3D= XTKEM_MEAN/MEAN_COUNT
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP)
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK3D)
 !
-    YRECFM='TKEMMA'
-    YCOMMENT='X_Y_Z_max kinetic energy (m2/s2)'
-    IGRID=1
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XTKEM_MAX,IGRID,ILENCH,YCOMMENT,IRESP)
+    TZFIELD%CMNHNAME   = 'TKEMMA'
+    TZFIELD%CLONGNAME  = 'MesoNH: TKEMMA'
+    TZFIELD%CUNITS     = 'm2 s-2'
+    TZFIELD%CCOMMENT   = 'X_Y_Z_max kinetic energy'
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XTKEM_MAX)
   END IF
 !
 END IF
@@ -660,16 +661,23 @@ END IF
 !
 IF (NSV >=1) THEN
   JSA=0
-  IGRID=1                                       ! individually in the file
   ! User scalar variables
-  DO JSV = 1,NSV_USER
-    WRITE(YRECFM,'(A3,I3.3)')'SVT',JSV
-    WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (KG/KG)'
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,    &
-                YCOMMENT,IRESP)
-    JSA=JSA+1
-  END DO
+  IF (NSV_USER>0) THEN
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CUNITS     = 'kg kg-1'
+    TZFIELD%CDIR       = 'XY'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 3
+    !
+    DO JSV = 1,NSV_USER
+      WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
+      TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+      TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
+      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XSVT(:,:,:,JSV))
+      JSA=JSA+1
+    END DO
+  END IF
   ! microphysical C2R2 scheme scalar variables
   IF (NSV_C2R2END>=NSV_C2R2BEG) THEN
     TZFIELD%CSTDNAME   = ''
@@ -688,14 +696,22 @@ IF (NSV >=1) THEN
     END DO
   END IF
   ! microphysical C3R5 scheme additional scalar variables
-  DO JSV = NSV_C1R3BEG,NSV_C1R3END
-    YRECFM=TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1))//'T'
-    WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (/M3)'
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,    &
-                YCOMMENT,IRESP)
-    JSA=JSA+1
-  END DO
+  IF (NSV_C1R3END>=NSV_C1R3BEG) THEN
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CUNITS     = 'm-3'
+    TZFIELD%CDIR       = 'XY'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 3
+    !
+    DO JSV = NSV_C1R3BEG,NSV_C1R3END
+      TZFIELD%CMNHNAME   = TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1))//'T'
+      TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+      WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
+      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XSVT(:,:,:,JSV))
+      JSA=JSA+1
+    END DO
+  END IF
 !
 ! microphysical LIMA variables
 !
@@ -771,161 +787,126 @@ IF (NSV >=1) THEN
   IF (LSCAV .AND. LAERO_MASS) THEN
   IF (ASSOCIATED(XINPAP)) THEN
   IF (SIZE(XINPAP) /= 0 ) THEN
-     YRECFM      = 'INPAP'
-     YCOMMENT    = 'X_Y_INstantaneous Precipitating Aerosol Rate (kg/m2/s)'
-     IGRID       = 1
-     ILENCH      = LEN(YCOMMENT)
-     CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XINPAP,IGRID,ILENCH, &
-                                             YCOMMENT,IRESP) ! unit conversion
-!
-     ZWORK2D(:,:)  = XRHOLW*XINPRR(:,:)*XSVT(:,:,2,NSV_LIMA_SCAVMASS)/ &
+    CALL IO_WRITE_FIELD(TPFILE,'INPAP',CLUOUT,IRESP,XINPAP)
+    !
+    ZWORK2D(:,:)  = XRHOLW*XINPRR(:,:)*XSVT(:,:,2,NSV_LIMA_SCAVMASS)/ &
                                         max( 1.e-20,XRT(:,:,2,3) ) !~2=at ground level
-     YRECFM      = 'INPBP'
-     YCOMMENT    = 'X_Y_INstantaneous Precipitating Aerosol Rate (kg/m2/s)'
-     IGRID       = 1
-     ILENCH      = LEN(YCOMMENT)
-     CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZWORK2D,IGRID,ILENCH, &
-                                             YCOMMENT,IRESP) ! unit conversion
-!
-     YRECFM      = 'ACPAP'
-     YCOMMENT    = 'X_Y_ACcumulated Precipitating Aerosol Rate (kg/m2)'
-     IGRID       = 1
-     ILENCH      = LEN(YCOMMENT)
-     CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XACPAP,IGRID,ILENCH, &
-                                             YCOMMENT,IRESP) ! unit conversion
+    TZFIELD%CMNHNAME   = 'INPBP'
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CLONGNAME  = 'MesoNH: INPBP'
+    TZFIELD%CUNITS     = 'kg m-2 s-1'
+    TZFIELD%CDIR       = 'XY'
+    TZFIELD%CCOMMENT   = 'X_Y_INstantaneous Precipitating Aerosol Rate'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 2
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK2D)
+    !
+    CALL IO_WRITE_FIELD(TPFILE,'ACPAP',CLUOUT,IRESP,XACPAP)
   END IF
   END IF
   END IF
 !
 !
   ! electrical scalar variables
-  DO JSV = NSV_ELECBEG,NSV_ELECEND
-    YRECFM=TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))//'T'
-    IF (JSV .GT. NSV_ELECBEG .AND. JSV .LT. NSV_ELECEND) THEN 
-      WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (C/m3)'
-    ELSE
-      WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (nb ions/m3)'
-    END IF
-    ILENCH=LEN(YCOMMENT)
-    ZWORK3D(:,:,:) = XSVT(:,:,:,JSV) * XRHODREF(:,:,:) ! C/kg --> C/m3
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D(:,:,:),IGRID,ILENCH,    &
-                YCOMMENT,IRESP)
-    JSA=JSA+1
-  END DO
+  IF (NSV_ELECEND>=NSV_ELECBEG) THEN
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CDIR       = 'XY'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 3
+    !
+    DO JSV = NSV_ELECBEG,NSV_ELECEND
+      TZFIELD%CMNHNAME   = TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))//'T'
+      TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+      IF (JSV .GT. NSV_ELECBEG .AND. JSV .LT. NSV_ELECEND) THEN 
+        TZFIELD%CUNITS     = 'C m-3'
+        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (C/m3)'
+      ELSE
+        TZFIELD%CUNITS     = 'm-3'
+        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (nb ions/m3)'
+      END IF
+      ZWORK3D(:,:,:) = XSVT(:,:,:,JSV) * XRHODREF(:,:,:) ! C/kg --> C/m3
+      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK3D)
+      JSA=JSA+1
+    END DO
+  END IF
+  !
   IF (CELEC /= 'NONE') THEN
-    YRECFM='EFIELDU'
-    YCOMMENT='X_Y_Z_EFIELDU (V/m)'
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XEFIELDU(:,:,:),IGRID,ILENCH,    &
-                YCOMMENT,IRESP)
+    CALL IO_WRITE_FIELD(TPFILE,'EFIELDU',CLUOUT,IRESP,XEFIELDU)
+    CALL IO_WRITE_FIELD(TPFILE,'EFIELDV',CLUOUT,IRESP,XEFIELDV)
+    CALL IO_WRITE_FIELD(TPFILE,'EFIELDW',CLUOUT,IRESP,XEFIELDW)
  !
-    YRECFM='EFIELDV'
-    YCOMMENT='X_Y_Z_EFIELDV (V/m)'
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XEFIELDV(:,:,:),IGRID,ILENCH,    &
-                YCOMMENT,IRESP)
- !
-    YRECFM='EFIELDW'
-    YCOMMENT='X_Y_Z_EFIELDW (V/m)'
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XEFIELDW(:,:,:),IGRID,ILENCH,    &
-                YCOMMENT,IRESP)
- !
-    YRECFM='EMODULE'
-    YCOMMENT='X_Y_Z_EMODULE (V/m)'
+    TZFIELD%CMNHNAME   = 'EMODULE'
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+    TZFIELD%CUNITS     = 'V m-1'
+    TZFIELD%CDIR       = 'XY'
+    TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 3
     ZWORK3D(:,:,:) = (XEFIELDU**2 + XEFIELDV**2 + XEFIELDW**2)**0.5
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D(:,:,:),IGRID,ILENCH,    &
-                YCOMMENT,IRESP)
- !
-    YRECFM='NI_IAGGS'
-    YCOMMENT='X_Y_Z_NI_IAGGS (pC/m3/s)'
-    ILENCH=LEN(YCOMMENT)
-    ZWORK3D(:,:,:) = XNI_IAGGS(:,:,:) * 1.E12
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D(:,:,:),IGRID,ILENCH,    &
-                YCOMMENT,IRESP)
- !
-    YRECFM='NI_IDRYG'
-    YCOMMENT='X_Y_Z_NI_IDRYG (pC/m3/s)'
-    ILENCH=LEN(YCOMMENT)
-    ZWORK3D(:,:,:) = XNI_IDRYG(:,:,:) * 1.E12
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D(:,:,:),IGRID,ILENCH,    &
-                YCOMMENT,IRESP)
- !
-    YRECFM='NI_SDRYG'
-    YCOMMENT='X_Y_Z_NI_SDRYG (pC/m3/s)'
-    ILENCH=LEN(YCOMMENT)
-    ZWORK3D(:,:,:) = XNI_SDRYG(:,:,:) * 1.E12
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D(:,:,:),IGRID,ILENCH,    &
-                YCOMMENT,IRESP)
- !
-    YRECFM='INDUC_CG'
-    YCOMMENT='X_Y_Z_INDUC_CG (pC/m3/s)'
-    ILENCH=LEN(YCOMMENT)
-    ZWORK3D(:,:,:) = XIND_RATE(:,:,:) * 1.E12
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D(:,:,:),IGRID,ILENCH,    &
-                YCOMMENT,IRESP)
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK3D)
  !
-    YRECFM='TRIG_IC'
-    YCOMMENT='X_Y_Z_FLASH_MAP_TRIG_IC (no unit)'
-    ILENCH=LEN(YCOMMENT)
-    ZWORK2D(:,:) = FLOAT(NMAP_TRIG_IC(:,:))
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZWORK2D(:,:),IGRID,ILENCH,    &
-                YCOMMENT,IRESP)
- !
-    YRECFM='IMPACT_CG'
-    YCOMMENT='X_Y_Z_FLASH_MAP_IMPACT_CG (no unit)'
-    ILENCH=LEN(YCOMMENT)
-    ZWORK2D(:,:) = FLOAT(NMAP_IMPACT_CG(:,:))
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZWORK2D(:,:),IGRID,ILENCH,    &
-                YCOMMENT,IRESP)
+    CALL FIND_FIELD_ID_FROM_MNHNAME('NI_IAGGS',IID,IRESP)
+    TZFIELD = TFIELDLIST(IID)
+    TZFIELD%CUNITS = 'pC m-3 s-1'
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XNI_IAGGS*1.E12)
  !
-    YRECFM='AREA_CG'
-    YCOMMENT='X_Y_Z_FLASH_MAP_2DAREA_CG (no unit)'
-    ILENCH=LEN(YCOMMENT)
-    ZWORK2D(:,:) = FLOAT(NMAP_2DAREA_CG(:,:))
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZWORK2D(:,:),IGRID,ILENCH,    &
-                YCOMMENT,IRESP)
+    CALL FIND_FIELD_ID_FROM_MNHNAME('NI_IDRYG',IID,IRESP)
+    TZFIELD = TFIELDLIST(IID)
+    TZFIELD%CUNITS = 'pC m-3 s-1'
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XNI_IDRYG*1.E12)
  !
-    YRECFM='AREA_IC'
-    YCOMMENT='X_Y_Z_FLASH_MAP_2DAREA_IC (no unit)'
-    ILENCH=LEN(YCOMMENT)
-    ZWORK2D(:,:) = FLOAT(NMAP_2DAREA_IC(:,:))
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZWORK2D(:,:),IGRID,ILENCH,    &
-                YCOMMENT,IRESP)
+    CALL FIND_FIELD_ID_FROM_MNHNAME('NI_SDRYG',IID,IRESP)
+    TZFIELD = TFIELDLIST(IID)
+    TZFIELD%CUNITS = 'pC m-3 s-1'
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XNI_SDRYG*1.E12)
  !
-    YRECFM='FLASH_3DCG'
-    YCOMMENT='X_Y_Z_FLASH_MAP_3DCG (no unit)'
-    ILENCH=LEN(YCOMMENT)
-    ZWORK3D(:,:,:) = FLOAT(NMAP_3DCG(:,:,:))
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D(:,:,:),IGRID,ILENCH,    &
-                YCOMMENT,IRESP)
+    CALL FIND_FIELD_ID_FROM_MNHNAME('INDUC_CG',IID,IRESP)
+    TZFIELD = TFIELDLIST(IID)
+    TZFIELD%CUNITS = 'pC m-3 s-1'
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XIND_RATE*1.E12)
  !
-    YRECFM='FLASH_3DIC'
-    YCOMMENT='X_Y_Z_FLASH_MAP_3DIC (no unit)'
-    ILENCH=LEN(YCOMMENT)
-    ZWORK3D(:,:,:) = FLOAT(NMAP_3DIC(:,:,:))
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D(:,:,:),IGRID,ILENCH,    &
-                YCOMMENT,IRESP)
+    CALL IO_WRITE_FIELD(TPFILE,'TRIG_IC',   CLUOUT,IRESP,NMAP_TRIG_IC)
+    CALL IO_WRITE_FIELD(TPFILE,'IMPACT_CG', CLUOUT,IRESP,NMAP_IMPACT_CG)
+    CALL IO_WRITE_FIELD(TPFILE,'AREA_CG',   CLUOUT,IRESP,NMAP_2DAREA_CG)
+    CALL IO_WRITE_FIELD(TPFILE,'AREA_IC',   CLUOUT,IRESP,NMAP_2DAREA_IC)
+    CALL IO_WRITE_FIELD(TPFILE,'FLASH_3DCG',CLUOUT,IRESP,NMAP_3DCG)
+    CALL IO_WRITE_FIELD(TPFILE,'FLASH_3DIC',CLUOUT,IRESP,NMAP_3DIC)
  !
     IF (LLNOX_EXPLICIT) THEN
-      YRECFM='LINOX'
-      WRITE(YCOMMENT,'(A6,A3,I3.3,A10)')'X_Y_Z_','SVT',JSV,' (mol/mol)'
-      ILENCH=LEN(YCOMMENT)
-      CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,NSV_LNOXEND),IGRID,ILENCH, &
-                  YCOMMENT,IRESP)
+      TZFIELD%CMNHNAME   = 'LINOX'
+      TZFIELD%CSTDNAME   = ''
+      TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+      TZFIELD%CUNITS     = 'mol mol-1'
+      TZFIELD%CDIR       = 'XY'
+      WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
+      TZFIELD%NGRID      = 1
+      TZFIELD%NTYPE      = TYPEREAL
+      TZFIELD%NDIMS      = 3
+      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XSVT(:,:,:,NSV_LNOXEND))
       JSA=JSA+1
     END IF
   END IF
   ! lagrangian variables
-  DO JSV = NSV_LGBEG,NSV_LGEND
-    YRECFM=TRIM(CLGNAMES(JSV-NSV_LGBEG+1))//'T'
-    WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (M)'
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,    &
-                YCOMMENT,IRESP)
-    JSA=JSA+1
-  END DO
+  IF (NSV_LGEND>=NSV_LGBEG) THEN
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CUNITS     = 'm'
+    TZFIELD%CDIR       = 'XY'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 3
+    !
+    DO JSV = NSV_LGBEG,NSV_LGEND
+      TZFIELD%CMNHNAME   = TRIM(CLGNAMES(JSV-NSV_LGBEG+1))//'T'
+      TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+      WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
+      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XSVT(:,:,:,JSV))
+      JSA=JSA+1
+    END DO
+  END IF
   ! Passive scalar variables        
   IF (LPASPOL) THEN
     TZFIELD%CSTDNAME   = ''
@@ -956,24 +937,36 @@ IF (NSV >=1) THEN
 #ifdef MNH_FOREFIRE
   ! ForeFire scalar variables
   IF ( LFOREFIRE ) THEN
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CUNITS     = 'kg kg-1'
+    TZFIELD%CDIR       = 'XY'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 3
+    !
     DO JSV = NSV_FFBEG,NSV_FFEND
-      WRITE(YRECFM,'(A3,I3.3)')'SVT',JSV
-      WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (KG/KG)'
-      ILENCH=LEN(YCOMMENT)
-      CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,    &
-                  YCOMMENT,IRESP)
+      WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
+      TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+      TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
+      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XSVT(:,:,:,JSV))
       JSA=JSA+1
     END DO
   END IF
 #endif
   ! Conditional sampling variables  
   IF (LCONDSAMP) THEN
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CUNITS     = 'kg kg-1'
+    TZFIELD%CDIR       = 'XY'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 3
+    !
     DO JSV = NSV_CSBEG,NSV_CSEND
-      WRITE(YRECFM,'(A3,I3.3)')'SVT',JSV
-      WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (KG/KG)'
-      ILENCH=LEN(YCOMMENT)
-      CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,    &
-                  YCOMMENT,IRESP)
+      WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
+      TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+      TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
+      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XSVT(:,:,:,JSV))
       JSA=JSA+1
     END DO
   !
@@ -1058,13 +1051,19 @@ IF (NSV >=1) THEN
       ENDIF
     ENDIF
   ELSE IF (LCH_CONV_LINOX) THEN
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CUNITS     = 'ppp'
+    TZFIELD%CDIR       = 'XY'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 3
+    !
     DO JSV = NSV_LNOXBEG,NSV_LNOXEND
-      YRECFM='LINOXT'
-      WRITE(YCOMMENT,'(A6,A3,I3.3,A)') 'X_Y_Z_','SVT',JSV,' (ppp)'
-      ILENCH=LEN(YCOMMENT)
-      CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH, &
-                  YCOMMENT,IRESP)
-      YCHNAMES(JSV-JSA)=YRECFM(1:LEN_TRIM(YRECFM)-1)
+      TZFIELD%CMNHNAME   = 'LINOXT'
+      TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+      WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)') 'X_Y_Z_','SVT',JSV
+      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XSVT(:,:,:,JSV))
+      YCHNAMES(JSV-JSA)=TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
     END DO
   ENDIF  
   ! aerosol scalar variables
@@ -1073,26 +1072,40 @@ IF (NSV >=1) THEN
       CALL CH_AER_REALLFI_n(XSVT(:,:,:,NSV_AERBEG:NSV_AEREND),XSVT(:,:,:,NSV_CHEMBEG-1+JP_CH_CO), XRHODREF)
     IF ((CPROGRAM == 'IDEAL ').AND.(NSV_AER > 1).AND.(IMI==1))  &
       CALL CH_AER_REALLFI_n(XSVT(:,:,:,NSV_AERBEG:NSV_AEREND),XSVT(:,:,:,NSV_CHEMBEG-1+JP_CH_CO),  XRHODREF)
-    DO JSV = NSV_AERBEG,NSV_AEREND
-      YRECFM=TRIM(UPCASE(CAERONAMES(JSV-NSV_AERBEG+1)))//'T'
-      WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (ppp)'
-      ILENCH=LEN(YCOMMENT)
-      CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,    &
-                  YCOMMENT,IRESP)
-      IF (JSV==NSV_AERBEG) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_AERBEG ',JSV
-      IF (JSV==NSV_AEREND) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_AEREND ',JSV
-      YCHNAMES(JSV-JSA)=  YRECFM(1:LEN_TRIM(YRECFM)-1)
-    END DO
-     IF (LDEPOS_AER(IMI)) THEN        
+    IF (NSV_AEREND>=NSV_AERBEG) THEN
+      TZFIELD%CSTDNAME   = ''
+      TZFIELD%CUNITS     = 'ppp'
+      TZFIELD%CDIR       = 'XY'
+      TZFIELD%NGRID      = 1
+      TZFIELD%NTYPE      = TYPEREAL
+      TZFIELD%NDIMS      = 3
+      !
+      DO JSV = NSV_AERBEG,NSV_AEREND
+        TZFIELD%CMNHNAME   = TRIM(UPCASE(CAERONAMES(JSV-NSV_AERBEG+1)))//'T'
+        TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
+        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XSVT(:,:,:,JSV))
+        IF (JSV==NSV_AERBEG) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_AERBEG ',JSV
+        IF (JSV==NSV_AEREND) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_AEREND ',JSV
+        YCHNAMES(JSV-JSA)=  TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
+      END DO
+    END IF
+    IF (LDEPOS_AER(IMI)) THEN
+      TZFIELD%CSTDNAME   = ''
+      TZFIELD%CUNITS     = 'ppp'
+      TZFIELD%CDIR       = 'XY'
+      TZFIELD%NGRID      = 1
+      TZFIELD%NTYPE      = TYPEREAL
+      TZFIELD%NDIMS      = 3
+      !
       DO JSV = NSV_AERDEPBEG,NSV_AERDEPEND
-        YRECFM=TRIM(CDEAERNAMES(JSV-NSV_AERDEPBEG+1))//'T'
-        WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (ppp)'
-        ILENCH=LEN(YCOMMENT)
-        CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,  &
-                    YCOMMENT,IRESP)
+        TZFIELD%CMNHNAME   = TRIM(CDEAERNAMES(JSV-NSV_AERDEPBEG+1))//'T'
+        TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
+        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XSVT(:,:,:,JSV))
         IF (JSV==NSV_AERDEPBEG) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_AERDEPBEG ',JSV
         IF (JSV==NSV_AERDEPEND) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_AERDEPEND ',JSV
-        YCHNAMES(JSV-JSA) = YRECFM(1:LEN_TRIM(YRECFM)-1)
+        YCHNAMES(JSV-JSA) = TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
       END DO   ! Loop on aq dust scalar variables      
     ENDIF
   END IF
@@ -1181,15 +1194,21 @@ IF (NSV >=1) THEN
       END DO   ! Loop on dust scalar variables
     END IF 
     IF (LDEPOS_DST(IMI)) THEN
+      TZFIELD%CSTDNAME   = ''
+      TZFIELD%CUNITS     = 'ppp'
+      TZFIELD%CDIR       = 'XY'
+      TZFIELD%NGRID      = 1
+      TZFIELD%NTYPE      = TYPEREAL
+      TZFIELD%NDIMS      = 3
+      !
       DO JSV = NSV_DSTDEPBEG,NSV_DSTDEPEND
-        YRECFM=TRIM(CDEDSTNAMES(JSV-NSV_DSTDEPBEG+1))//'T'
-        WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (ppp)'
-        ILENCH=LEN(YCOMMENT)
-        CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,  &
-                    YCOMMENT,IRESP)
+        TZFIELD%CMNHNAME   = TRIM(CDEDSTNAMES(JSV-NSV_DSTDEPBEG+1))//'T'
+        TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
+        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XSVT(:,:,:,JSV))
         IF (JSV==NSV_DSTDEPBEG) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_DSTDEPBEG ',JSV
         IF (JSV==NSV_DSTDEPEND) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_DSTDEPEND ',JSV
-        YCHNAMES(JSV-JSA) = YRECFM(1:LEN_TRIM(YRECFM)-1)
+        YCHNAMES(JSV-JSA) = TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
       END DO   ! Loop on aq dust scalar variables      
     ENDIF
   ENDIF  
@@ -1216,6 +1235,12 @@ IF (NSV >=1) THEN
         STOP
       END IF
       ALLOCATE(YSLTNAMES(NSV_SLTEND - NSV_SLTBEG+1))
+      TZFIELD%CSTDNAME   = ''
+      TZFIELD%CUNITS     = 'ppp'
+      TZFIELD%CDIR       = 'XY'
+      TZFIELD%NGRID      = 1
+      TZFIELD%NTYPE      = TYPEREAL
+      TZFIELD%NDIMS      = 3
       DO JMODE=1, NMODE_SLT
         DO JMOM = 1, IMOMENTS
           !Index from which names are picked
@@ -1224,12 +1249,12 @@ IF (NSV >=1) THEN
           JSV = (JMODE-1)*IMOMENTS      & !Number of moments previously counted
                + JMOM                   & !Number of moments in this mode
                + (NSV_SLTBEG -1)          !Previous list of tracers 
-          YRECFM = TRIM(YPSALT_INI(ISV_NAME_IDX))//'T'  !The refererence which will be written to file
-          WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (ppp)'
-          ILENCH=LEN(YCOMMENT)
-          CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH, &
-                     YCOMMENT,IRESP)
-          YSLTNAMES((JMODE-1)*IMOMENTS+JMOM)=YRECFM(1:LEN_TRIM(YRECFM)-1)
+
+          TZFIELD%CMNHNAME   = TRIM(YPSALT_INI(ISV_NAME_IDX))//'T'  !The refererence which will be written to file
+          TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+          WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
+          CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XSVT(:,:,:,JSV))
+          YSLTNAMES((JMODE-1)*IMOMENTS+JMOM)=TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
         END DO ! Loop on moments
       END DO   ! Loop on modes
       !
@@ -1240,27 +1265,39 @@ IF (NSV >=1) THEN
     ELSE 
       ! We are in the subprogram MESONH, CSALTNAMES are allocated and are 
       !in the same order as the variables in XSVT (i.e. following JPSALTORDER)
+      TZFIELD%CSTDNAME   = ''
+      TZFIELD%CUNITS     = 'ppp'
+      TZFIELD%CDIR       = 'XY'
+      TZFIELD%NGRID      = 1
+      TZFIELD%NTYPE      = TYPEREAL
+      TZFIELD%NDIMS      = 3
+      !
       DO JSV = NSV_SLTBEG,NSV_SLTEND
-        YRECFM=TRIM(CSALTNAMES(JSV-NSV_SLTBEG+1))//'T'
-        WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (ppp)'
-        ILENCH=LEN(YCOMMENT)
-        CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,  &
-                    YCOMMENT,IRESP)
+        TZFIELD%CMNHNAME   = TRIM(CSALTNAMES(JSV-NSV_SLTBEG+1))//'T'
+        TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
+        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XSVT(:,:,:,JSV))
         IF (JSV==NSV_SLTBEG) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_SLTBEG ',JSV
         IF (JSV==NSV_SLTEND) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_SLTEND ',JSV
-        YCHNAMES(JSV-JSA) = YRECFM(1:LEN_TRIM(YRECFM)-1)
+        YCHNAMES(JSV-JSA) = TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
       END DO   ! Loop on sea salt scalar variables
     END IF 
-     IF (LDEPOS_SLT(IMI)) THEN        
+    IF (LDEPOS_SLT(IMI)) THEN        
+      TZFIELD%CSTDNAME   = ''
+      TZFIELD%CUNITS     = 'ppp'
+      TZFIELD%CDIR       = 'XY'
+      TZFIELD%NGRID      = 1
+      TZFIELD%NTYPE      = TYPEREAL
+      TZFIELD%NDIMS      = 3
+      !
       DO JSV = NSV_SLTDEPBEG,NSV_SLTDEPEND
-        YRECFM=TRIM(CDESLTNAMES(JSV-NSV_SLTDEPBEG+1))//'T'
-        WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (ppp)'
-        ILENCH=LEN(YCOMMENT)
-        CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,  &
-                    YCOMMENT,IRESP)
+        TZFIELD%CMNHNAME   = TRIM(CDESLTNAMES(JSV-NSV_SLTDEPBEG+1))//'T'
+        TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
+        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XSVT(:,:,:,JSV))
         IF (JSV==NSV_SLTDEPBEG) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_SLTDEPBEG ',JSV
         IF (JSV==NSV_SLTDEPEND) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_SLTDEPEND ',JSV
-        YCHNAMES(JSV-JSA) = YRECFM(1:LEN_TRIM(YRECFM)-1)
+        YCHNAMES(JSV-JSA) = TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
       END DO   ! Loop on aq dust scalar variables      
     ENDIF
   ENDIF  
@@ -1302,13 +1339,21 @@ IF (NSV >=1) THEN
   END IF 
   !
   ! lagrangian variables
-  DO JSV = NSV_LGBEG,NSV_LGEND
-    YRECFM=TRIM(CLGNAMES(JSV-NSV_LGBEG+1))//'T'
-    WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (M)'
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,    &
-                YCOMMENT,IRESP)
-  END DO
+  IF (NSV_LGEND>=NSV_LGBEG) THEN
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CUNITS     = 'm'
+    TZFIELD%CDIR       = 'XY'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 3
+    !
+    DO JSV = NSV_LGBEG,NSV_LGEND
+      TZFIELD%CMNHNAME   = TRIM(CLGNAMES(JSV-NSV_LGBEG+1))//'T'
+      TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+      WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
+      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XSVT(:,:,:,JSV))
+    END DO
+  END IF
 END IF
 !
 !
@@ -1323,22 +1368,12 @@ CALL WRITE_LB_n(TPFILE)
 !
 CALL IO_WRITE_FIELD(TPFILE,'DRYMASST',CLUOUT,IRESP,XDRYMASST)
 !
-YDIR='XY'
-!
 IF( CTURB /= 'NONE' .AND. CTOM=='TM06') THEN
-  YRECFM='BL_DEPTH'
-  YCOMMENT='X_Y_BL_DEPTH (M)'
-  IGRID=1
-  ILENCH=LEN(YCOMMENT)
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XBL_DEPTH,IGRID,ILENCH,YCOMMENT,IRESP)
+  CALL IO_WRITE_FIELD(TPFILE,'BL_DEPTH',CLUOUT,IRESP,XBL_DEPTH)
 END IF
 !
 IF( CTURB /= 'NONE' .AND. LRMC01) THEN
-  YRECFM='SBL_DEPTH'
-  YCOMMENT='X_Y_SBL_DEPTH (M)'
-  IGRID=1
-  ILENCH=LEN(YCOMMENT)
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XSBL_DEPTH,IGRID,ILENCH,YCOMMENT,IRESP)
+  CALL IO_WRITE_FIELD(TPFILE,'SBL_DEPTH',CLUOUT,IRESP,XBL_DEPTH)
 END IF
 !
 IF( CTURB /= 'NONE' .AND. (CPROGRAM == 'MESONH' .OR. CPROGRAM == 'DIAG')) THEN
@@ -1376,24 +1411,32 @@ IF (CPROGRAM == 'MESONH') THEN
  END IF 
 END IF 
 !
-!
- YDIR='XY'
 !
 ! IF (NSV >=1) THEN
 !    DO JSV = NSV_C2R2BEG,NSV_C2R2END
 !     IF (JSV == NSV_C2R2BEG ) THEN
-!       YRECFM='RSVS_CLD1'
-!       YCOMMENT='X_Y_Z_RHS_CLD'                        
-!       ILENCH=LEN(YCOMMENT)
-!       CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XRRS_CLD(:,:,:,IRR),IGRID,ILENCH,  &
-!                 YCOMMENT,IRESP)
+!       TZFIELD%CMNHNAME   = 'RSVS_CLD1'
+!       TZFIELD%CSTDNAME   = ''
+!       TZFIELD%CLONGNAME  = 'MesoNH: RSVS_CLD1'
+!       TZFIELD%CUNITS     = '1'
+!       TZFIELD%CDIR       = 'XY'
+!       TZFIELD%CCOMMENT   = 'X_Y_Z_RHS_CLD'
+!       TZFIELD%NGRID      = 1
+!       TZFIELD%NTYPE      = TYPEREAL
+!       TZFIELD%NDIMS      = 3
+!       CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XRRS_CLD(:,:,:,IRR))
 !     END IF
 !     IF (JSV == NSV_C2R2END ) THEN
-!       YRECFM='RSVS_CLD2'
-!       YCOMMENT='X_Y_Z_RHS_CLD'                        
-!       ILENCH=LEN(YCOMMENT)
-!       CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XRRS_CLD(:,:,:,IRR),IGRID,ILENCH,  &
-!                 YCOMMENT,IRESP)
+!       TZFIELD%CMNHNAME   = 'RSVS_CLD2'
+!       TZFIELD%CSTDNAME   = ''
+!       TZFIELD%CLONGNAME  = 'MesoNH: RSVS_CLD2'
+!       TZFIELD%CUNITS     = '1'
+!       TZFIELD%CDIR       = 'XY'
+!       TZFIELD%CCOMMENT   = 'X_Y_Z_RHS_CLD'
+!       TZFIELD%NGRID      = 1
+!       TZFIELD%NTYPE      = TYPEREAL
+!       TZFIELD%NDIMS      = 3
+!       CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XRRS_CLD(:,:,:,IRR))
 !     END IF
 !    END DO
 ! END IF
@@ -1560,8 +1603,6 @@ END IF
 !*       1.10   Diagnostic variables related to the precipitations
 !
 IF (CPROGRAM /= 'IDEAL') THEN
-  YDIR='XY'
-!
   IF (ASSOCIATED(XINPRC)) THEN
   IF (SIZE(XINPRC) /= 0 ) THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('INPRC',IID,IRESP)
@@ -1660,7 +1701,7 @@ IF (CPROGRAM /= 'IDEAL') THEN
     TZFIELD%CMNHNAME   = 'ACPRT'
     TZFIELD%CSTDNAME   = ''
     TZFIELD%CLONGNAME  = 'MesoNH: ACPRT'
-    TZFIELD%CUNITS     = 'mm '
+    TZFIELD%CUNITS     = 'mm'
     TZFIELD%CDIR       = 'XY'
     TZFIELD%CCOMMENT   = 'X_Y_Total ACcumulated PRecipitation rate'
     TZFIELD%NGRID      = 1
@@ -1678,102 +1719,141 @@ END IF
 !
 IF (LFORCING) THEN
 !
-  YDIR='--'
-!
-  YRECFM='FRC'
-  YCOMMENT=' '
-  IGRID=0
-  ILENCH=LEN(YCOMMENT)
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,NFRC,IGRID,ILENCH,YCOMMENT,IRESP)
+  TZFIELD%CMNHNAME   = 'FRC'
+  TZFIELD%CSTDNAME   = ''
+  TZFIELD%CLONGNAME  = 'MesoNH: FRC'
+  TZFIELD%CUNITS     = '1'
+  TZFIELD%CDIR       = '--'
+  TZFIELD%CCOMMENT   = 'Number of forcing profiles'
+  TZFIELD%NGRID      = 0
+  TZFIELD%NTYPE      = TYPEINT
+  TZFIELD%NDIMS      = 0
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,NFRC)
 !
   DO JT=1,NFRC
 !
     WRITE (YFRC,'(I3.3)') JT
 !
+    TZFIELD%CMNHNAME   = 'DTFRC'//YFRC
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+    TZFIELD%CUNITS     = 'seconds since YYYY-MM-DD HH:MM:SS.S'
+    TZFIELD%CDIR       = '--'
+    TZFIELD%CCOMMENT   = 'Date of forcing profile '//YFRC
+    TZFIELD%NGRID      = 0
+    TZFIELD%NTYPE      = TYPEDATE
+    TZFIELD%NDIMS      = 0
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,TDTFRC(JT))
 !
-    YRECFM='DTFRC'//YFRC
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,TDTFRC(JT),IGRID,ILENCH, &
-                                                            YCOMMENT,IRESP)
-!
-!
-    YRECFM='UFRC'//YFRC
-    YCOMMENT=' '
-    IGRID=1
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XUFRC(:,JT),IGRID,ILENCH,     &
-                                                            YCOMMENT,IRESP)
-!
-!
-    YRECFM='VFRC'//YFRC
-    YCOMMENT=' '
-    IGRID=1
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XVFRC(:,JT),IGRID,ILENCH,     &
-                                                            YCOMMENT,IRESP)
-!
-!
-    YRECFM='WFRC'//YFRC
-    YCOMMENT=' '
-    IGRID=4
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XWFRC(:,JT),IGRID,ILENCH,     &
-                                                            YCOMMENT,IRESP)
-!
-!
-    YRECFM='THFRC'//YFRC
-    YCOMMENT=' '
-    IGRID=1
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XTHFRC(:,JT),IGRID,ILENCH,    &
-                                                            YCOMMENT,IRESP)
-!
-!
-    YRECFM='RVFRC'//YFRC
-    YCOMMENT=' '
-    IGRID=1
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XRVFRC(:,JT),IGRID,ILENCH,    &
-                                                            YCOMMENT,IRESP)
-!
+    TZFIELD%CMNHNAME   = 'UFRC'//YFRC
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+    TZFIELD%CUNITS     = 'm s-1'
+    TZFIELD%CDIR       = '--'
+    TZFIELD%CCOMMENT   = 'Zonal component of horizontal forcing wind'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 1
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XUFRC(:,JT))
 !
-    YRECFM='TENDTHFRC'//YFRC
-    YCOMMENT=' '
-    IGRID=1
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XTENDTHFRC(:,JT),IGRID,ILENCH,  &
-                                                            YCOMMENT,IRESP)
+    TZFIELD%CMNHNAME   = 'VFRC'//YFRC
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+    TZFIELD%CUNITS     = 'm s-1'
+    TZFIELD%CDIR       = '--'
+    TZFIELD%CCOMMENT   = 'Meridian component of horizontal forcing wind'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 1
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XVFRC(:,JT))
 !
+    TZFIELD%CMNHNAME   = 'WFRC'//YFRC
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+    TZFIELD%CUNITS     = 'm s-1'
+    TZFIELD%CDIR       = '--'
+    TZFIELD%CCOMMENT   = 'Vertical forcing wind'
+    TZFIELD%NGRID      = 4
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 1
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XWFRC(:,JT))
 !
-    YRECFM='TENDRVFRC'//YFRC
-    YCOMMENT=' '
-    IGRID=1
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XTENDRVFRC(:,JT),IGRID,ILENCH,  &
-                                                            YCOMMENT,IRESP)
+    TZFIELD%CMNHNAME   = 'THFRC'//YFRC
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+    TZFIELD%CUNITS     = 'K'
+    TZFIELD%CDIR       = '--'
+    TZFIELD%CCOMMENT   = 'Forcing potential temperature'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 1
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XTHFRC(:,JT))
 !
+    TZFIELD%CMNHNAME   = 'RVFRC'//YFRC
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+    TZFIELD%CUNITS     = 'kg kg-1'
+    TZFIELD%CDIR       = '--'
+    TZFIELD%CCOMMENT   = 'Forcing vapor mixing ratio'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 1
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XRVFRC(:,JT))
 !
-    YRECFM='GXTHFRC'//YFRC
-    YCOMMENT=' '
-    IGRID=1
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XGXTHFRC(:,JT),IGRID,ILENCH,  &
-                                                            YCOMMENT,IRESP)
+    TZFIELD%CMNHNAME   = 'TENDTHFRC'//YFRC
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+    TZFIELD%CUNITS     = 'K s-1'
+    TZFIELD%CDIR       = '--'
+    TZFIELD%CCOMMENT   = 'Large-scale potential temperature tendency for forcing'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 1
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XTENDTHFRC(:,JT))
 !
+    TZFIELD%CMNHNAME   = 'TENDRVFRC'//YFRC
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+    TZFIELD%CUNITS     = 'kg kg-1 s-1'
+    TZFIELD%CDIR       = '--'
+    TZFIELD%CCOMMENT   = 'Large-scale vapor mixing ratio tendency for forcing'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 1
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XTENDRVFRC(:,JT))
 !
-    YRECFM='GYTHFRC'//YFRC
-    YCOMMENT=' '
-    IGRID=1
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XGYTHFRC(:,JT),IGRID,ILENCH,  &
-                                                            YCOMMENT,IRESP)
+    TZFIELD%CMNHNAME   = 'GXTHFRC'//YFRC
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+    TZFIELD%CUNITS     = 'K m-1'
+    TZFIELD%CDIR       = '--'
+    TZFIELD%CCOMMENT   = 'Large-scale potential temperature gradient for forcing'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 1
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XGXTHFRC(:,JT))
 !
+    TZFIELD%CMNHNAME   = 'GYTHFRC'//YFRC
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+    TZFIELD%CUNITS     = 'K m-1'
+    TZFIELD%CDIR       = '--'
+    TZFIELD%CCOMMENT   = 'Large-scale potential temperature gradient for forcing'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 1
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XGYTHFRC(:,JT))
 !
-    YRECFM='PGROUNDFRC'//YFRC
-    YCOMMENT=' '
-    IGRID=0
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XPGROUNDFRC(JT),IGRID,ILENCH,  &
-                                                            YCOMMENT,IRESP)
+    TZFIELD%CMNHNAME   = 'PGROUNDFRC'//YFRC
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+    TZFIELD%CUNITS     = 'Pa'
+    TZFIELD%CDIR       = '--'
+    TZFIELD%CCOMMENT   = 'Forcing ground pressure'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 0
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XPGROUNDFRC(JT))
 !
   END DO
 !
@@ -1783,107 +1863,123 @@ END IF
 ! -------------------------------------------------------------------------
 IF ( L2D_ADV_FRC ) THEN
 !
-  YDIR='--'
-!
-  YRECFM='NADVFRC1'
-  YCOMMENT=' '
-  IGRID=0
-  ILENCH=LEN(YCOMMENT)
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,NADVFRC,IGRID,ILENCH,YCOMMENT,IRESP)
+  TZFIELD%CMNHNAME   = 'NADVFRC1'
+  TZFIELD%CSTDNAME   = ''
+  TZFIELD%CLONGNAME  = 'MesoNH: NADVFRC1'
+  TZFIELD%CUNITS     = '1'
+  TZFIELD%CDIR       = '--'
+  TZFIELD%CCOMMENT   = 'Number of forcing profiles'
+  TZFIELD%NGRID      = 0
+  TZFIELD%NTYPE      = TYPEINT
+  TZFIELD%NDIMS      = 0
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,NADVFRC)
 !
   DO JT=1,NADVFRC
 !
     WRITE (YFRC,'(I3.3)') JT
 !
-    YRECFM='DTADV'//YFRC
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,TDTADVFRC(JT),IGRID,ILENCH, &
-                                                            YCOMMENT,IRESP)
+    TZFIELD%CMNHNAME   = 'DTADV'//YFRC
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+    TZFIELD%CUNITS     = 'seconds since YYYY-MM-DD HH:MM:SS.S'
+    TZFIELD%CDIR       = '--'
+    TZFIELD%CCOMMENT   = 'Date and time of the advecting forcing '//YFRC
+    TZFIELD%NGRID      = 0
+    TZFIELD%NTYPE      = TYPEDATE
+    TZFIELD%NDIMS      = 0
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,TDTADVFRC(JT))
 !                                                                
-    YRECFM='TH_ADV'//YFRC
-    YCOMMENT='K/S'
-    IGRID=1
-    ILENCH=LEN(YCOMMENT)
-!    
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XDTHFRC(:,:,:,JT),IGRID,ILENCH,  &
-                                                            YCOMMENT,IRESP)
-!    
-    YRECFM='Q_ADV'//YFRC
-    YCOMMENT='KG/KG/S'
-    IGRID=1
-    ILENCH=LEN(YCOMMENT)
+    TZFIELD%CMNHNAME   = 'TH_ADV'//YFRC
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+    TZFIELD%CUNITS     = 'K s-1'
+    TZFIELD%CDIR       = '--'
+    TZFIELD%CCOMMENT   = ''
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 3
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XDTHFRC(:,:,:,JT))
 !    
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XDRVFRC(:,:,:,JT),IGRID,ILENCH,  &
-                                                            YCOMMENT,IRESP)
+    TZFIELD%CMNHNAME   = 'Q_ADV'//YFRC
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+    TZFIELD%CUNITS     = 'kg kg-1 s-1'
+    TZFIELD%CDIR       = '--'
+    TZFIELD%CCOMMENT   = ''
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 3
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XDRVFRC(:,:,:,JT))
 !
   ENDDO
 ENDIF
 !
 IF ( L2D_REL_FRC ) THEN
 !
-  YDIR='--'
-!
-  YRECFM='NRELFRC1'
-  YCOMMENT=' '
-  IGRID=0
-  ILENCH=LEN(YCOMMENT)
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,NRELFRC,IGRID,ILENCH,YCOMMENT,IRESP)
+  TZFIELD%CMNHNAME   = 'NRELFRC1'
+  TZFIELD%CSTDNAME   = ''
+  TZFIELD%CLONGNAME  = 'MesoNH: NRELFRC1'
+  TZFIELD%CUNITS     = '1'
+  TZFIELD%CDIR       = '--'
+  TZFIELD%CCOMMENT   = 'Number of forcing profiles'
+  TZFIELD%NGRID      = 0
+  TZFIELD%NTYPE      = TYPEINT
+  TZFIELD%NDIMS      = 0
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,NRELFRC)
 !
   DO JT=1,NRELFRC
 !
     WRITE (YFRC,'(I3.3)') JT
 !
-    YRECFM='DTREL'//YFRC
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,TDTRELFRC(JT),IGRID,ILENCH, &
-                                                            YCOMMENT,IRESP)
+    TZFIELD%CMNHNAME   = 'DTREL'//YFRC
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+    TZFIELD%CUNITS     = 'seconds since YYYY-MM-DD HH:MM:SS.S'
+    TZFIELD%CDIR       = '--'
+    TZFIELD%CCOMMENT   = 'Date and time of the relaxation forcing '//YFRC
+    TZFIELD%NGRID      = 0
+    TZFIELD%NTYPE      = TYPEDATE
+    TZFIELD%NDIMS      = 0
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,TDTRELFRC(JT))
 !                                                                
-    YRECFM='TH_REL'//YFRC
-    YCOMMENT='K'
-    IGRID=1
-    ILENCH=LEN(YCOMMENT)
-!    
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XTHREL(:,:,:,JT),IGRID,ILENCH,  &
-                                                            YCOMMENT,IRESP)
-!    
-    YRECFM='Q_REL'//YFRC
-    YCOMMENT='KG/KG'
-    IGRID=1
-    ILENCH=LEN(YCOMMENT)
+    TZFIELD%CMNHNAME   = 'TH_REL'//YFRC
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+    TZFIELD%CUNITS     = 'K'
+    TZFIELD%CDIR       = '--'
+    TZFIELD%CCOMMENT   = ''
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 3
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XTHREL(:,:,:,JT))
 !    
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XRVREL(:,:,:,JT),IGRID,ILENCH,  &
-                                                            YCOMMENT,IRESP)
+    TZFIELD%CMNHNAME   = 'Q_REL'//YFRC
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+    TZFIELD%CUNITS     = 'kg kg-1'
+    TZFIELD%CDIR       = '--'
+    TZFIELD%CCOMMENT   = ''
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 3
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XRVREL(:,:,:,JT))
 !
   ENDDO
 ENDIF
 !
 !*       1.11bis   Eddy Fluxes variables    ! Modif PP
 !
-YDIR='XY'
 IF ( LTH_FLX ) THEN
-   YRECFM='VT_FLX'
-   YCOMMENT='K M/S'
-   IGRID=2
-   ILENCH=LEN(YCOMMENT)
-   CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XVTH_FLUX_M,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-   YRECFM='WT_FLX'
-   YCOMMENT='K M/S'
-   IGRID=4
-   ILENCH=LEN(YCOMMENT)
-   CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XWTH_FLUX_M,IGRID,ILENCH,YCOMMENT,IRESP)!
+   CALL IO_WRITE_FIELD(TPFILE,'VT_FLX',CLUOUT,IRESP,XVTH_FLUX_M)
+   CALL IO_WRITE_FIELD(TPFILE,'WT_FLX',CLUOUT,IRESP,XWTH_FLUX_M)
 END IF
 !
-IF ( LUV_FLX) THEN
-   YRECFM='VU_FLX'
-   YCOMMENT='M/S**2'
-   IGRID=1
-   ILENCH=LEN(YCOMMENT)
-   CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XVU_FLUX_M,IGRID,ILENCH,YCOMMENT,IRESP)
-END IF
+IF ( LUV_FLX) CALL IO_WRITE_FIELD(TPFILE,'VU_FLX',CLUOUT,IRESP,XVU_FLUX_M)
 !
 !*       1.12   Balloon variables
 !
 !
-IF (LFLYER) CALL WRITE_BALLOON_n(YFMFILE)
+IF (LFLYER) CALL WRITE_BALLOON_n(TPFILE%CNAME)
 !
 !
 !*       1.13    Filtered variables for hurricane initialization
@@ -1893,128 +1989,39 @@ IF ( CPROGRAM=='REAL  ' ) THEN
   IF (LFILTERING) THEN
   !
     IF (NDIAG_FILT >=0) THEN
-!
-      YDIR='XY'
 !
 !             i) Total fields (TOT=BASIC+TOTDIS)
 !
-      YRECFM='UT15'
-      YCOMMENT='X_Y_Z_U component of Total wind (m/s)'
-      IGRID=2
-      ILENCH=LEN(YCOMMENT)
-      CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XUTOT,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-      YRECFM='VT15'
-      YCOMMENT='X_Y_Z_V component of Total wind (m/s)'
-      IGRID=3
-      ILENCH=LEN(YCOMMENT)
-      CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XVTOT,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-      YRECFM='TEMPTOT'
-      YCOMMENT='X_Y_Z_TOTal TEMPerature (K)'
-      IGRID=1
-      ILENCH=LEN(YCOMMENT)
-      CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XTTOT,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-      IF (INDEX(CFILTERING,'P')/=0) THEN
-        YRECFM='PRESTOT'
-        YCOMMENT='X_Y_Z_TOTal PRESsure (Pa)'
-        IGRID=1
-        ILENCH=LEN(YCOMMENT)
-        CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XPTOT,IGRID,ILENCH,YCOMMENT,IRESP)
-      ENDIF
-      IF (INDEX(CFILTERING,'Q')/=0) THEN
-        YRECFM='HUMTOT'
-        YCOMMENT='X_Y_Z_TOTal specific HUMidity (kg/kg)'
-        IGRID=1
-        ILENCH=LEN(YCOMMENT)
-        CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XQTOT,IGRID,ILENCH,YCOMMENT,IRESP)
-      ENDIF      
+      CALL IO_WRITE_FIELD(TPFILE,'UT15',   CLUOUT,IRESP,XUTOT)
+      CALL IO_WRITE_FIELD(TPFILE,'VT15',   CLUOUT,IRESP,XVTOT)
+      CALL IO_WRITE_FIELD(TPFILE,'TEMPTOT',CLUOUT,IRESP,XTTOT)
+      IF (INDEX(CFILTERING,'P')/=0) CALL IO_WRITE_FIELD(TPFILE,'PRESTOT',CLUOUT,IRESP,XPTOT)
+      IF (INDEX(CFILTERING,'Q')/=0) CALL IO_WRITE_FIELD(TPFILE,'HUMTOT', CLUOUT,IRESP,XQTOT)
 !
 !             ii) Environmental fields (ENV=TOT-VORDIS)
 !
-      YRECFM='UT16'
-      YCOMMENT='X_Y_Z_U component of Environmental wind (m/s)'
-      IGRID=2
-      ILENCH=LEN(YCOMMENT)
-      CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XUENV,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-      YRECFM='VT16'
-      YCOMMENT='X_Y_Z_V component of Environmental wind (m/s)'
-      IGRID=3
-      ILENCH=LEN(YCOMMENT)
-      CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XVENV,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-      YRECFM='TEMPENV'
-      YCOMMENT='X_Y_Z_ENVironmental TEMPerature (K)'
-      IGRID=1
-      ILENCH=LEN(YCOMMENT)
-      CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XTENV,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-      IF (INDEX(CFILTERING,'P')/=0) THEN
-        YRECFM='PRESENV'
-        YCOMMENT='X_Y_Z_ENVironmental PRESsure (Pa)'
-        IGRID=1
-        ILENCH=LEN(YCOMMENT)
-        CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XPENV,IGRID,ILENCH,YCOMMENT,IRESP)
-      ENDIF
-      IF (INDEX(CFILTERING,'Q')/=0) THEN
-        YRECFM='HUMENV'
-        YCOMMENT='X_Y_Z_ENVironmental specific HUMidity (kg/kg)'
-        IGRID=1
-        ILENCH=LEN(YCOMMENT)
-        CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XQENV,IGRID,ILENCH,YCOMMENT,IRESP)
-      ENDIF      
+      CALL IO_WRITE_FIELD(TPFILE,'UT16',   CLUOUT,IRESP,XUENV)
+      CALL IO_WRITE_FIELD(TPFILE,'VT16',   CLUOUT,IRESP,XVENV)
+      CALL IO_WRITE_FIELD(TPFILE,'TEMPENV',CLUOUT,IRESP,XTENV)
+      IF (INDEX(CFILTERING,'P')/=0) CALL IO_WRITE_FIELD(TPFILE,'PRESENV',CLUOUT,IRESP,XPENV)
+      IF (INDEX(CFILTERING,'Q')/=0) CALL IO_WRITE_FIELD(TPFILE,'HUMENV', CLUOUT,IRESP,XQENV)
 !
     END IF
     IF (NDIAG_FILT >=1) THEN
 !
 !             iii) Basic (filtered) fields
 !
-      YRECFM='UT17'
-      YCOMMENT='X_Y_Z_U component of Basic wind (m/s)'
-      IGRID=2
-      ILENCH=LEN(YCOMMENT)
-      CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XUBASIC,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-      YRECFM='VT17'
-      YCOMMENT='X_Y_Z_V component of Basic wind (m/s)'
-      IGRID=3
-      ILENCH=LEN(YCOMMENT)
-      CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XVBASIC,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-      YRECFM='TEMPBAS'
-      YCOMMENT='X_Y_Z_BASic TEMPerature (K)'
-      IGRID=1
-      ILENCH=LEN(YCOMMENT)
-      CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XTBASIC,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-      IF (INDEX(CFILTERING,'P')/=0) THEN
-        YRECFM='PRESBAS'
-        YCOMMENT='Pa'
-        YCOMMENT='X_Y_Z_BASic PRESsure (Pa)'
-        IGRID=1
-        ILENCH=LEN(YCOMMENT)
-        CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XPBASIC(:,:,1),IGRID,ILENCH,YCOMMENT,IRESP)
-      ENDIF
-!
-      IF (INDEX(CFILTERING,'Q')/=0) THEN
-        YRECFM='HUMBAS'
-        YCOMMENT='X_Y_Z_BASic specific HUMidity (kg/kg)'
-        IGRID=1
-        ILENCH=LEN(YCOMMENT)
-        CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XQBASIC,IGRID,ILENCH,YCOMMENT,IRESP)
-      ENDIF
+      CALL IO_WRITE_FIELD(TPFILE,'UT17',   CLUOUT,IRESP,XUBASIC)
+      CALL IO_WRITE_FIELD(TPFILE,'VT17',   CLUOUT,IRESP,XVBASIC)
+      CALL IO_WRITE_FIELD(TPFILE,'TEMPBAS',CLUOUT,IRESP,XTBASIC)
+      IF (INDEX(CFILTERING,'P')/=0) CALL IO_WRITE_FIELD(TPFILE,'PRESBAS',CLUOUT,IRESP,XPBASIC)
+      IF (INDEX(CFILTERING,'Q')/=0) CALL IO_WRITE_FIELD(TPFILE,'HUMBAS', CLUOUT,IRESP,XQBASIC)
     END IF
     IF (NDIAG_FILT >=2) THEN
 !
 !             iv) Total disturbance tangential wind
 !
-      YRECFM='VTDIS'
-      YCOMMENT='X_Y_Z_Total disturbance tangential wind (m/s)'
-      IGRID=1
-      ILENCH=LEN(YCOMMENT)
-      CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XVTDIS,IGRID,ILENCH,YCOMMENT,IRESP)
+      CALL IO_WRITE_FIELD(TPFILE,'VTDIS',CLUOUT,IRESP,XVTDIS)
 !
     END IF
 !
@@ -2023,14 +2030,18 @@ IF ( CPROGRAM=='REAL  ' ) THEN
 !*       1.14    Dummy variables in PREP_REAL_CASE
 !
   IF (ALLOCATED(CDUMMY_2D)) THEN
-    YDIR='XY'
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CUNITS     = ''
+    TZFIELD%CDIR       = 'XY'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 2
+    !
     DO JSA=1,SIZE(XDUMMY_2D,3)
-      YRECFM=ADJUSTL(CDUMMY_2D(JSA))
-      YCOMMENT='X_Y_Z_'//ADJUSTL(YRECFM)
-      IGRID=1
-      ILENCH=LEN(YCOMMENT)
-      CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XDUMMY_2D(:,:,JSA), &
-                  IGRID,ILENCH,YCOMMENT,IRESP)
+      TZFIELD%CMNHNAME   = ADJUSTL(CDUMMY_2D(JSA))
+      TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+      TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
+      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XDUMMY_2D(:,:,JSA))
     END DO
   END IF
 !