Skip to content
Snippets Groups Projects
write_lfin.f90 72.9 KiB
Newer Older
  • Learn to ignore specific revisions
  • !MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
    
    !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
    
    !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
    
    !MNH_LIC for details. version 1.
    
    !-----------------------------------------------------------------
    !--------------- special set of characters for RCS information
    !-----------------------------------------------------------------
    
    Gaelle TANGUY's avatar
    Gaelle TANGUY committed
    ! $Source: /srv/cvsroot/MNH-VX-Y-Z/src/MNH/write_lfin.f90,v $ $Revision: 1.2.2.4.2.4.2.8.2.4.2.5 $
    
    ! masdev4_7 BUG1 2007/06/20 16:58:20
    
    !-----------------------------------------------------------------
    !     #########################
          MODULE MODI_WRITE_LFIFM_n
    !     #########################
    !
    INTERFACE
    !
    
    SUBROUTINE WRITE_LFIFM_n(TPFILE,HDADFILE)
    
    TYPE(TFILEDATA), INTENT(IN) :: TPFILE   ! File characteristics
    CHARACTER(LEN=*),INTENT(IN) :: HDADFILE ! Corresponding FM-file name of its DAD model
    
    END SUBROUTINE WRITE_LFIFM_n
    !
    END INTERFACE
    !
    END MODULE MODI_WRITE_LFIFM_n
    !
    !
    !     ##########################################
    
          SUBROUTINE WRITE_LFIFM_n(TPFILE,HDADFILE)
    
    !     ##########################################
    !
    !!****  *WRITE_LFIFM_n* - routine to write a LFIFM file for model $n
    !!
    !!    PURPOSE
    !!    -------
    !        The purpose of this routine is to write an initial LFIFM File 
    
    !     of name YFMFILE//'.lfi' with the FM routines.  
    
    !
    !!**  METHOD
    !!    ------
    !!      The data are written in the LFIFM file :
    !!        - dimensions
    !!        - grid variables
    !!        - configuration variables
    !!        - prognostic variables at time t and t-dt
    !!        - 1D anelastic reference state
    !!
    !!      The localization on the model grid is also indicated :
    !!
    !!        IGRID = 1 for mass grid point
    !!        IGRID = 2 for U grid point
    !!        IGRID = 3 for V grid point
    !!        IGRID = 4 for w grid point
    !!        IGRID = 0 for meaningless case
    !!          
    !!
    !!    EXTERNAL
    !!    --------
    !!      WRITE_BALLOON_n : routine to write balloon records
    !!      WRITE_LB_n : routine to write LB fields
    !!      FMWRIT     : FM-routine to write a record
    !!
    !!
    !!    IMPLICIT ARGUMENTS
    !!    ------------------
    !!      Module MODD_DIM_n   : contains dimensions
    !!      Module MODD_TIME    : contains time variables for all models
    !!      Module MODD_TIME_n   : contains time variables 
    !!      Module MODD_GRID    : contains spatial grid variables for all models
    !!      Module MODD_GRID_n : contains spatial grid variables
    !!      Module MODD_REF     : contains reference state variables
    !!      Module MODD_LUNIT_n: contains logical unit variables.
    !!      Module MODD_CONF    : contains configuration variables for all models
    !!      Module MODD_CONF_n  : contains configuration variables
    !!      Module MODD_FIELD_n  : contains prognostic variables
    !!      Module MODD_GR_FIELD_n : contains surface prognostic variables
    !!      Module MODD_LSFIELD_n  : contains Larger Scale variables
    !!      Module MODD_PARAM_n    : contains parameterization options
    !!      Module MODD_TURB_n    : contains turbulence options
    !!      Module MODD_FRC    : contains forcing variables
    !!      Module MODD_DEEP_CONVECTION_n : contains deep convection tendencies
    !!      Module MODD_PARAM_KAFR_n : contains configuration
    !!      Module MODD_AIRCRAFT_BALLOON : contains balloon and aircraft variables
    !!
    !!    REFERENCE
    !!    ---------
    !!
    !!
    !!    AUTHOR
    !!    ------
    !!  	V. Ducrocq   *Meteo France* 
    !!
    !!    MODIFICATIONS
    !!    -------------
    !!      Original    06/05/94 
    !!       V. Ducrocq    27/06/94                  
    !!       J.Stein       20/10/94 (name of the FMFILE)
    !!       J.Stein       06/12/94 add the LS fields   
    !!       J.P. Lafore   09/01/95 add the DRYMASST
    !!       J.Stein       20/01/95 add TKE and change the ycomment for the water 
    !!                              variables       
    !!       J.Stein       23/01/95 add a TKE switch and MODD_PARAM_n
    !!       J.Stein       16/03/95 remove R from the historical variables
    !!       J.Stein       20/03/95 add the EPS var.  
    !!       J.Stein       30/06/95 add the variables related to the subgrid condens
    !!       S. Belair     01/09/95 add surface variables and ground parameters
    !!       J.-P. Pinty   15/09/95 add the radiation parameters
    !!       J.Stein       23/01/96 add the TSZ0 option for the surface scheme
    !!       M.Georgelin   13/12/95 add the forcing variables 
    !!       J.-P. Pinty   15/02/96 add external control for the forcing
    !!       J.Stein P.Bougeault  15/03/96 add the cloud fraction and change the
    !!                                     surface parameters for TSZ0 option
    !!       J.Stein P.Jabouille  30/04/96 add the storage type
    !!       J.Stein P.Jabouille  20/05/96 switch for XSIGS and XSRC 
    !!       J.Stein              10/10/96 change Xsrc into XSRCM and XRCT
    
    !!       J.P. Lafore          30/07/96 add YFMFILE and HDADFILE writing
    
    !!                                     corresponding to MY_NAME and DAD_NAME (for nesting)
    !!       V.Masson      08/10/96 add LTHINSHELL
    !!       J.-P. Pinty   15/12/96 add the microphysics (ice)
    !!       J.-P. Pinty   11/01/97 add the deep convection
    !!       J.-P. Pinty   27/01/97 split the recording of the SV array
    !!       J.-P. Pinty   29/01/97 set recording of PRCONV and PACCONV in mm/h and
    !!                                                         mm respectively
    !!       J. Viviand    04/02/97 convert precipitation rates in mm/h
    !!       J.P. Lafore   25/11/96 resolution ratio and position for nesting
    !!       J.P. Lafore   26/02/97 adding of "surfacic" LS fields
    !!       J.Stein       22/06/97 use the absolute pressure
    !!       V.Masson      09/07/97 add directional z0 and Subgrid-Scale Orography
    !!       V.Masson      18/08/97 call to fmwrit directly with dates and strings
    !!       J.Stein       22/10/97 add the LB fields for U,V,W, THETA, RV....
    !!       P.Bechtold    24/01/98 add convective tracer tendencies
    !!       P.Jabouille   15/10/98 //
    !!       P.Jabouille   25/05/99 replace 'DTRAD_CLONLY' by 'DTRAD_CLLY' (size too long)
    !!       J. Stein      20/05/98 remove NXEND and NYEND
    !!       V. Masson     04/01/00 remove TSZ0 option
    !!       P. Jabouille  03/04/00 write XCIT only for MESONH program
    !!       K. Suhre      03/12/99 add chemical variable names                         
    !        F.solmon /V.Masson   06/00 adapt for patch surface variables
    !!       D.Gazen       22/01/01 use MODD_NSV and add names to scalar variables
    !!       G.Jaubert     06/06/01 add Balloon current positions
    !!       P.Jabouille   10/04/02 extra radiative surface flux
    !!       J.-P. Pinty   29/11/02 add C3R5, ICE2, ICE4, CELEC
    !!       V. Masson     01/2004  removes surface (externalization)
    !!                     05/2006  Remove KEPS
    !!       J. escobar    02/09/2009 missing YDIR for CLDFR variable
    !!                     October 2009 (G. Tanguy) add ILENCH=LEN(YCOMMENT) after
    !!                                              change of YCOMMENT
    !!       P. Aumond     12/2009 Mean_UM,...
    !!       M. Leriche    16/07/10 add ice phase chemical species
    !!       C. Barthe     Jan. 2011  add diagnostics for elec
    !!       J. Escobar    Feb. 2012  replace MINVAL/MAXVAL by MIN_ll/MAX_ll in OUTPUT_LISTING
    !!       P.Peyrille    06/12 2D west african monsoon: ADV forcing and fluxes writing
    !!                     AEROSOLS and ozone vertical distribution are also written
    !!       M.Tomasini    06/12 2D west african monsoon: nesting for ADV forcing writing
    
    !!       Pialat/Tulet  15/02/2012 add ForeFire variables
    
    !!       J. Escobar    Mars 2014 , missing YDIR="XY" in 1.6 for tendencies fields 
    
    !!       J.escobar & M.Leriche 23/06/2014 Pb with JSA increment versus ini_nsv order initialization 
    
    !!       P. Tulet      Nov 2014 accumulated moles of aqueous species that fall at the surface
    
    !!       C.Lac         Dec.2014 writing past wind fields for centred advection
    
    !!       J.-P. Pinty   Jan 2015 add LNOx and flash map diagnostics
    
    !!       J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1
    
    !!       P. Tulet & M. Leriche    Nov 2015 add mean pH value in the rain at the surface
    
    !!       J.escobar     04/08/2015 suit Pb with writ_lfin JSA increment , modif in ini_nsv to have good order initialization
    
    Gaelle TANGUY's avatar
    Gaelle TANGUY committed
    !!       Modification    01/2016  (JP Pinty) Add LIMA
    
    !!       M.Mazoyer     04/16 : Add supersaturation fields
    
    !!       P.Wautelet    11/07/2016 removed MNH_NCWRIT define
    
    !!                   
    !-------------------------------------------------------------------------------
    !
    !*       0.    DECLARATIONS
    !              ------------
    !
    USE MODD_DIM_n
    USE MODD_CONF
    USE MODD_CONF_n
    USE MODD_GRID
    USE MODD_GRID_n
    USE MODD_TIME
    USE MODD_TIME_n
    USE MODD_FIELD_n
    USE MODD_MEAN_FIELD_n
    USE MODD_DUMMY_GR_FIELD_n
    USE MODD_LSFIELD_n
    USE MODD_DYN_n
    USE MODD_PARAM_n
    USE MODD_REF
    USE MODD_LUNIT_n
    USE MODD_TURB_n
    USE MODD_RADIATIONS_n,   ONLY : XDTHRAD, NCLEARCOL_TM1, XFLALWD, &
                                    XZENITH, XDIR_ALB, XSCA_ALB, XEMIS, XTSRAD, &
    
                                    XDIRSRFSWD, XSCAFLASWD, XDIRFLASWD, XAZIM
    
    USE MODD_REF_n,  ONLY : XRHODREF
    USE MODD_FRC
    USE MODD_PRECIP_n
    USE MODD_ELEC_n
    USE MODD_CST
    USE MODD_CLOUDPAR
    USE MODD_DEEP_CONVECTION_n
    USE MODD_PARAM_KAFR_n
    USE MODD_NESTING
    USE MODD_PARAMETERS
    USE MODD_GR_FIELD_n
    USE MODD_CH_MNHC_n,       ONLY: LUSECHEM,LCH_CONV_LINOX, &
    
                                    LUSECHAQ,LUSECHIC,LCH_PH, XCH_PHINIT
    
    USE MODD_CH_PH_n
    USE MODD_CH_M9_n
    USE MODD_RAIN_C2R2_DESCR, ONLY: C2R2NAMES
    USE MODD_ICE_C1R3_DESCR,  ONLY: C1R3NAMES
    
    USE MODD_ELEC_DESCR,      ONLY: CELECNAMES, LLNOX_EXPLICIT
    
    USE MODD_LG,              ONLY: CLGNAMES
    USE MODD_NSV
    USE MODD_AIRCRAFT_BALLOON
    USE MODD_HURR_CONF, ONLY: LFILTERING,CFILTERING,NDIAG_FILT
    USE MODD_HURR_FIELD_n
    USE MODD_PREP_REAL, ONLY: CDUMMY_2D, XDUMMY_2D
    USE MODD_DUST
    USE MODD_SALT
    USE MODD_PASPOL
    
    #ifdef MNH_FOREFIRE
    USE MODD_FOREFIRE
    #endif
    
    USE MODD_CONDSAMP
    USE MODD_CH_AEROSOL
    
    USE MODD_PAST_FIELD_n
    
    USE MODD_ADV_n, ONLY: CUVW_ADV_SCHEME,XRTKEMS,CTEMP_SCHEME
    
    Gaelle TANGUY's avatar
    Gaelle TANGUY committed
    USE MODD_PARAM_LIMA     , ONLY: NMOD_CCN, LSCAV, LAERO_MASS,                &
                                    NMOD_IFN, NMOD_IMM, NINDICE_CCN_IMM, LHHONI
    USE MODD_PARAM_LIMA_WARM, ONLY: CLIMA_WARM_NAMES, CAERO_MASS
    USE MODD_PARAM_LIMA_COLD, ONLY: CLIMA_COLD_NAMES
    USE MODD_LIMA_PRECIP_SCAVENGING_n
    !
    
    USE MODE_FMWRIT
    USE MODE_ll
    
    USE MODD_IO_ll, ONLY: TFILEDATA
    
    USE MODE_IO_ll, ONLY: UPCASE,CLOSE_ll
    
    USE MODE_FIELD
    
    USE MODE_GRIDPROJ
    USE MODE_MODELN_HANDLER
    !
    USE MODI_GATHER_ll
    USE MODI_WRITE_LB_n
    USE MODI_WRITE_BALLOON_n
    USE MODI_DUSTLFI_n
    USE MODI_SALTLFI_n
    USE MODI_CH_AER_REALLFI_n
    !
    
    !20131128
    USE MODE_MPPDB
    USE MODE_EXTRAPOL
    
    ! Modif Eddy fluxes
    USE MODD_DEF_EDDY_FLUX_n       ! Ajout PP
    USE MODD_DEF_EDDYUV_FLUX_n     ! Ajout PP
    USE MODD_LATZ_EDFLX            ! Ajout PP
    !
    USE MODD_2D_FRC                  ! Ajout PP
    USE MODD_ADVFRC_n              ! Modif PP ADV FRC
    USE MODD_RELFRC_n
    !
    
    USE MODD_PARAM_C2R2
    
    ! 
    IMPLICIT NONE
    !
    !*       0.1   Declarations of arguments
    !
    
    TYPE(TFILEDATA), INTENT(IN) :: TPFILE   ! File characteristics
    CHARACTER(LEN=*),INTENT(IN) :: HDADFILE ! Corresponding FM-file name of its DAD model
    
    !
    !*       0.2   Declarations of local variables
    !
    INTEGER           :: ILUOUT         ! logical unit
    INTEGER           :: IRESP          ! IRESP  : return-code if a problem appears 
                                        !in LFI subroutines at the open of the file              
    !
    INTEGER           :: JSV            ! loop index for scalar variables
    INTEGER           :: JSA            ! beginning of chemical-aerosol variables
    
    ! 
    CHARACTER(LEN=3)  :: YFRC           ! to mark the time of the forcing
    INTEGER           :: JT             ! loop index
    !
    INTEGER           :: JMOM, IMOMENTS, JMODE, ISV_NAME_IDX  ! dust modes
    ! 
    REAL,DIMENSION(:,:), ALLOCATABLE  :: ZWORK2D     ! Working array
    REAL,DIMENSION(:,:,:), ALLOCATABLE  :: ZWORK3D     ! Working array
    !
    REAL                              :: ZLATOR, ZLONOR ! geographical coordinates of 1st mass point
    REAL                              :: ZXHATM, ZYHATM ! conformal    coordinates of 1st mass point
    REAL, DIMENSION(:), ALLOCATABLE   :: ZXHAT_ll    !  Position x in the conformal
                                                     ! plane (array on the complete domain)
    REAL, DIMENSION(:), ALLOCATABLE   :: ZYHAT_ll    !   Position y in the conformal
                                                     ! plane (array on the complete domain)
    INTEGER :: IMI ! Current model index
    !
    INTEGER           :: ICH_NBR        ! to write number and names of scalar 
    INTEGER,DIMENSION(:),ALLOCATABLE :: ICH_NAMES !(chem+aero+dust) variables
    
    CHARACTER(LEN=NMNHNAMELGTMAX),DIMENSION(:),ALLOCATABLE :: YDSTNAMES,YCHNAMES, YSLTNAMES
    
    INTEGER           :: ILREC,ILENG    !in NSV.DIM and NSV.TITRE
    INTEGER           :: INFO_ll
    INTEGER :: IKRAD
    INTEGER           :: JI,JJ,JK   ! loop index
    INTEGER           :: IIU,IJU,IKU,IIB,IJB,IKB,IIE,IJE,IKE ! Arrays bounds
    
    Gaelle TANGUY's avatar
    Gaelle TANGUY committed
    !
    CHARACTER(LEN=2)  :: INDICE
    
    TYPE(TFIELDDATA)  :: TZFIELD
    
    !-------------------------------------------------------------------------------
    !
    !*	0. Initialization
    !
    IMI = GET_CURRENT_MODEL_INDEX()
    !
    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)))
    
    !
    !*       0.2     ARRAYS BOUNDS INITIALIZATION
    !
    IIU=NIMAX+2*JPHEXT
    IJU=NJMAX+2*JPHEXT
    IKU=NKMAX+2*JPVEXT
    
    CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
    
    IKB=1+JPVEXT
    IKE=IKU-JPVEXT
    !
    !*       1.     WRITES IN THE LFI FILE
    ! 
    !
    
    CALL IO_WRITE_FIELD(TPFILE,'FILETYPE',TPFILE%CTYPE)
    
    !
    IF (LEN_TRIM(HDADFILE)>0) THEN
    
      CALL IO_WRITE_FIELD(TPFILE,'DXRATIO',NDXRATIO_ALL(IMI))
      CALL IO_WRITE_FIELD(TPFILE,'DYRATIO',NDYRATIO_ALL(IMI))
      CALL IO_WRITE_FIELD(TPFILE,'XOR',    NXOR_ALL(IMI))
      CALL IO_WRITE_FIELD(TPFILE,'YOR',    NYOR_ALL(IMI))
    
    END IF
    !
    !*       1.1    Type and Dimensions :
    !
    
    CALL IO_WRITE_FIELD(TPFILE,'IMAX',NIMAX_ll)
    CALL IO_WRITE_FIELD(TPFILE,'JMAX',NJMAX_ll)
    CALL IO_WRITE_FIELD(TPFILE,'KMAX',NKMAX)
    
    !
    !*       1.2    Grid variables :
    !
    IF (.NOT.LCARTESIAN) THEN
    
      CALL IO_WRITE_FIELD(TPFILE,'RPK',   XRPK)
      CALL IO_WRITE_FIELD(TPFILE,'LONORI',XLONORI)
      CALL IO_WRITE_FIELD(TPFILE,'LATORI',XLATORI)
    
    ! 
    !* diagnostic of 1st mass point
    !
      ALLOCATE(ZXHAT_ll(NIMAX_ll+ 2 * JPHEXT),ZYHAT_ll(NJMAX_ll+2 * JPHEXT))
      CALL GATHERALL_FIELD_ll('XX',XXHAT,ZXHAT_ll,IRESP) !//
      CALL GATHERALL_FIELD_ll('YY',XYHAT,ZYHAT_ll,IRESP) !//
      ZXHATM = 0.5 * (ZXHAT_ll(1)+ZXHAT_ll(2))
      ZYHATM = 0.5 * (ZYHAT_ll(1)+ZYHAT_ll(2))
      CALL SM_LATLON(XLATORI,XLONORI,ZXHATM,ZYHATM,ZLATOR,ZLONOR)
      DEALLOCATE(ZXHAT_ll,ZYHAT_ll)
    !
    
      !LONOR and LATOR not in TFIELDLIST because local variables
    
      TZFIELD%CMNHNAME   = 'LONOR'
      TZFIELD%CSTDNAME   = ''
      TZFIELD%CLONGNAME  = 'MesoNH: LONOR'
      TZFIELD%CUNITS     = 'degree'
      TZFIELD%CDIR       = '--'
      TZFIELD%CCOMMENT   = 'Longitude of 1st mass point'
      TZFIELD%NGRID      = 0
      TZFIELD%NTYPE      = TYPEREAL
      TZFIELD%NDIMS      = 0
    
    !
      TZFIELD%CMNHNAME   = 'LATOR'
      TZFIELD%CLONGNAME  = 'MesoNH: LATOR'
      TZFIELD%CCOMMENT   = 'Latitude of 1st mass point'
    
    CALL IO_WRITE_FIELD(TPFILE,'THINSHELL',LTHINSHELL)
    CALL IO_WRITE_FIELD(TPFILE,'LAT0',XLAT0)
    CALL IO_WRITE_FIELD(TPFILE,'LON0',XLON0)
    CALL IO_WRITE_FIELD(TPFILE,'BETA',XBETA)
    
    CALL IO_WRITE_FIELD(TPFILE,'XHAT',XXHAT)
    CALL IO_WRITE_FIELD(TPFILE,'YHAT',XYHAT)
    CALL IO_WRITE_FIELD(TPFILE,'ZHAT',XZHAT)
    
    ! #ifdef MNH_NCWRIT
    ! !
    ! !*SB*MAY2012
    ! !*SB* * WRITE ALT
    
    ! IF (LNETCDF) CALL IO_WRITE_FIELD(TPFILE,'ALT',XZZ)
    
    IF (.NOT.LCARTESIAN) THEN
    
      CALL IO_WRITE_FIELD(TPFILE,'LAT',XLAT)
      CALL IO_WRITE_FIELD(TPFILE,'LON',XLON)
    
    CALL IO_WRITE_FIELD(TPFILE,'ZS',   XZS)
    CALL IO_WRITE_FIELD(TPFILE,'ZSMT', XZSMT)
    CALL IO_WRITE_FIELD(TPFILE,'SLEVE',LSLEVE)
    
    !
    IF (LSLEVE) THEN
    
      CALL IO_WRITE_FIELD(TPFILE,'LEN1',XLEN1)
      CALL IO_WRITE_FIELD(TPFILE,'LEN2',XLEN2)
    
    CALL IO_WRITE_FIELD(TPFILE,'DTMOD',TDTMOD)
    CALL IO_WRITE_FIELD(TPFILE,'DTCUR',TDTCUR)
    CALL IO_WRITE_FIELD(TPFILE,'DTEXP',TDTEXP)
    CALL IO_WRITE_FIELD(TPFILE,'DTSEG',TDTSEG)
    
    !
    !*       1.3    Configuration  variables :
    !
    
    CALL IO_WRITE_FIELD(TPFILE,'L1D',      L1D)
    CALL IO_WRITE_FIELD(TPFILE,'L2D',      L2D)
    CALL IO_WRITE_FIELD(TPFILE,'PACK',     LPACK)
    CALL IO_WRITE_FIELD(TPFILE,'CARTESIAN',LCARTESIAN)
    CALL IO_WRITE_FIELD(TPFILE,'LBOUSS',   LBOUSS)
    
    CALL IO_WRITE_FIELD(TPFILE,'SURF',     CSURF)
    CALL IO_WRITE_FIELD(TPFILE,'CPL_AROME',LCPL_AROME)
    CALL IO_WRITE_FIELD(TPFILE,'COUPLING', LCOUPLING)
    
    !*       1.4    Prognostic variables :
    !
    !
    
    !*       1.4.1  Time t:
    
    !
    !20131128 check XUT-> X_Y_W_U wind component for PRC
    !  CALL EXTRAPOL('W',XUT)
    !  CALL EXTRAPOL('E',XUT)
    !  CALL EXTRAPOL('N',XUT)
    !  CALL EXTRAPOL('S',XUT)
    
    CALL MPPDB_CHECK3D(XUT,"write_lfifmn before IO_WRITE_FIELD::XUT",PRECISION)
    
    CALL MPPDB_CHECK3D(XUT,"write_lfifmn after IO_WRITE_FIELD::XUT",PRECISION)
    
    !
    !20131128 check XVT-> X_Y_W_V wind component for PRC
    CALL MPPDB_CHECK3D(XVT,"write_lfifmn::XVT",PRECISION)
    
    CALL IO_WRITE_FIELD(TPFILE,'VT',XVT)
    CALL IO_WRITE_FIELD(TPFILE,'WT',XWT)
    
    !*       1.4.2  Time t-dt:
    
    IF ( (CUVW_ADV_SCHEME == 'CEN4TH') .AND. (CTEMP_SCHEME == 'LEFR') ) THEN
    
      CALL IO_WRITE_FIELD(TPFILE,'UM', XUM)
      CALL IO_WRITE_FIELD(TPFILE,'VM', XVM)
      CALL IO_WRITE_FIELD(TPFILE,'WM', XWM)
      CALL IO_WRITE_FIELD(TPFILE,'DUM',XDUM)
      CALL IO_WRITE_FIELD(TPFILE,'DVM',XDVM)
      CALL IO_WRITE_FIELD(TPFILE,'DWM',XDWM)
    
    IF (MEAN_COUNT /= 0) THEN
    !
    
      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
    
      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
    
      TZFIELD%CMNHNAME   = 'UMMA'
      TZFIELD%CLONGNAME  = 'MesoNH: UMMA'
      TZFIELD%CUNITS     = 'm s-1'
      TZFIELD%CCOMMENT   = 'X_Y_Z_U component of max wind'
    
    !
      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
    
      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
    
      TZFIELD%CMNHNAME   = 'VMMA'
      TZFIELD%CLONGNAME  = 'MesoNH: VMMA'
      TZFIELD%CUNITS     = 'm s-1'
      TZFIELD%CCOMMENT   = 'X_Y_Z_V component of max wind'
    
    !
      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
    
    !
      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
    
      TZFIELD%CMNHNAME   = 'WMMA'
      TZFIELD%CLONGNAME  = 'MesoNH: WMMA'
      TZFIELD%CUNITS     = 'm s-1'
      TZFIELD%CCOMMENT   = 'X_Y_Z_vertical max wind'
    
    !
      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
    
    !
      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
    
      TZFIELD%CMNHNAME   = 'THMMA'
      TZFIELD%CLONGNAME  = 'MesoNH: THMMA'
      TZFIELD%CUNITS     = 'K'
      TZFIELD%CCOMMENT   = 'X_Y_Z_max potential temperature'
    
    !
      TZFIELD%CMNHNAME   = 'TEMPMME'
      TZFIELD%CLONGNAME  = 'MesoNH: TEMPMME'
      TZFIELD%CUNITS     = 'K'
      TZFIELD%CCOMMENT   = 'X_Y_Z_mean temperature'
      ZWORK3D = XTEMPM_MEAN/MEAN_COUNT
    
    !
      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
    
      TZFIELD%CMNHNAME   = 'TEMPMMA'
      TZFIELD%CLONGNAME  = 'MesoNH: TEMPMMA'
      TZFIELD%CUNITS     = 'K'
      TZFIELD%CCOMMENT   = 'X_Y_Z_max temperature'
    
    !
      TZFIELD%CMNHNAME   = 'PABSMME'
      TZFIELD%CLONGNAME  = 'MesoNH: PABSMME'
      TZFIELD%CUNITS     = 'Pa'
      TZFIELD%CCOMMENT   = 'X_Y_Z_mean ABSolute Pressure'
      ZWORK3D = XPABSM_MEAN/MEAN_COUNT
    
    !
      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
    
      !
      TZFIELD%CMNHNAME   = 'PABSMMA'
      TZFIELD%CLONGNAME  = 'MesoNH: PABSMMA'
      TZFIELD%CUNITS     = 'Pa'
      TZFIELD%CCOMMENT   = 'X_Y_Z_max ABSolute Pressure'
    
    !
      IF (CTURB /= 'NONE') THEN
    
        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
    
        TZFIELD%CMNHNAME   = 'TKEMMA'
        TZFIELD%CLONGNAME  = 'MesoNH: TKEMMA'
        TZFIELD%CUNITS     = 'm2 s-2'
        TZFIELD%CCOMMENT   = 'X_Y_Z_max kinetic energy'
    
    !
    END IF
    !
    !
    IF (CTURB /= 'NONE') THEN
    
      CALL IO_WRITE_FIELD(TPFILE,'TKET',XTKET)
      IF (CPROGRAM == 'MESONH') CALL IO_WRITE_FIELD(TPFILE,'TKEMS',XRTKEMS)
    
    !
    IF (NRR >=1) THEN
    
      IF (LUSERV) CALL IO_WRITE_FIELD(TPFILE,'RVT',XRT(:,:,:,IDX_RVT))
    
      IF (LUSERC) THEN
    
        CALL IO_WRITE_FIELD(TPFILE,'RCT',XRT(:,:,:,IDX_RCT))
    
        WRITE (ILUOUT,*) IDX_RCT,' RC min-max ',MIN_ll(XRT(:,:,:,IDX_RCT),INFO_ll),MAX_ll(XRT(:,:,:,IDX_RCT),INFO_ll)
    
      END IF
      IF (LUSERR) THEN
    
        CALL IO_WRITE_FIELD(TPFILE,'RRT',XRT(:,:,:,IDX_RRT))
    
        WRITE (ILUOUT,*) IDX_RRT,' RR min-max ',MIN_ll(XRT(:,:,:,IDX_RRT),INFO_ll),MAX_ll(XRT(:,:,:,IDX_RRT),INFO_ll)
    
      END IF 
      IF (LUSERI) THEN
    
        CALL IO_WRITE_FIELD(TPFILE,'RIT',XRT(:,:,:,IDX_RIT))
    
        WRITE (ILUOUT,*) IDX_RIT,' RI min-max ',MIN_ll(XRT(:,:,:,IDX_RIT),INFO_ll),MAX_ll(XRT(:,:,:,IDX_RIT),INFO_ll)
    
        IF ( CPROGRAM == 'MESONH' .AND. CCLOUD(1:3) == 'ICE') THEN
    
        END IF
    
      END IF 
      IF (LUSERS) THEN
    
        CALL IO_WRITE_FIELD(TPFILE,'RST',XRT(:,:,:,IDX_RST))
    
        WRITE (ILUOUT,*) IDX_RST,' RS min-max ',MINVAL(XRT(:,:,:,IDX_RST)),MAXVAL(XRT(:,:,:,IDX_RST))
    
      END IF
      IF (LUSERG) THEN
    
        CALL IO_WRITE_FIELD(TPFILE,'RGT',XRT(:,:,:,IDX_RGT))
    
        WRITE (ILUOUT,*) IDX_RGT,' RG min-max ',MINVAL(XRT(:,:,:,IDX_RGT)),MAXVAL(XRT(:,:,:,IDX_RGT))
    
      IF (LUSERH) CALL IO_WRITE_FIELD(TPFILE,'RHT',XRT(:,:,:,IDX_RHT))
    
    END IF
    !
    IF (NSV >=1) THEN
      JSA=0
      ! User scalar variables
    
      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,XSVT(:,:,:,JSV))
    
      ! microphysical C2R2 scheme scalar variables
    
      IF (NSV_C2R2END>=NSV_C2R2BEG) THEN
        TZFIELD%CSTDNAME   = ''
        TZFIELD%CUNITS     = 'm-3'
        TZFIELD%CDIR       = 'XY'
        TZFIELD%NGRID      = 1
        TZFIELD%NTYPE      = TYPEREAL
        TZFIELD%NDIMS      = 3
        !
        DO JSV = NSV_C2R2BEG,NSV_C2R2END
          TZFIELD%CMNHNAME   = TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+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,XSVT(:,:,:,JSV))
    
      ! microphysical C3R5 scheme additional scalar variables
    
      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,XSVT(:,:,:,JSV))
    
    Gaelle TANGUY's avatar
    Gaelle TANGUY committed
    !
    ! microphysical LIMA variables
    !
    
      IF (NSV_LIMA_END>=NSV_LIMA_BEG) THEN
        TZFIELD%CSTDNAME   = ''
        TZFIELD%CDIR       = 'XY'
        TZFIELD%NGRID      = 1
        TZFIELD%NTYPE      = TYPEREAL
        TZFIELD%NDIMS      = 3
      END IF
    
    Gaelle TANGUY's avatar
    Gaelle TANGUY committed
      DO JSV = NSV_LIMA_BEG,NSV_LIMA_END
    
        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
    
    Gaelle TANGUY's avatar
    Gaelle TANGUY committed
    ! Nc
    
        IF (JSV .EQ. NSV_LIMA_NC) THEN
          TZFIELD%CMNHNAME   = TRIM(CLIMA_WARM_NAMES(1))//'T'
        END IF
    
    Gaelle TANGUY's avatar
    Gaelle TANGUY committed
    ! Nr
    
        IF (JSV .EQ. NSV_LIMA_NR) THEN
          TZFIELD%CMNHNAME   = TRIM(CLIMA_WARM_NAMES(2))//'T'
        END IF
    
    Gaelle TANGUY's avatar
    Gaelle TANGUY committed
    ! N CCN free
    
        IF (JSV .GE. NSV_LIMA_CCN_FREE .AND. JSV .LT. NSV_LIMA_CCN_ACTI) THEN
          WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_CCN_FREE + 1)
          TZFIELD%CMNHNAME   = TRIM(CLIMA_WARM_NAMES(3))//INDICE//'T'
        END IF
    
    Gaelle TANGUY's avatar
    Gaelle TANGUY committed
    ! N CCN acti
    
        IF (JSV .GE. NSV_LIMA_CCN_ACTI .AND. JSV .LT. NSV_LIMA_CCN_ACTI + NMOD_CCN) THEN
          WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_CCN_ACTI + 1)
          TZFIELD%CMNHNAME   = TRIM(CLIMA_WARM_NAMES(4))//INDICE//'T'
        END IF
    
    Gaelle TANGUY's avatar
    Gaelle TANGUY committed
    ! Scavenging
    
        IF (JSV .EQ. NSV_LIMA_SCAVMASS) THEN
          TZFIELD%CMNHNAME   = TRIM(CAERO_MASS(1))//'T'
          TZFIELD%CUNITS     = 'kg kg-1'
        END IF
    
    Gaelle TANGUY's avatar
    Gaelle TANGUY committed
    ! Ni
    
        IF (JSV .EQ. NSV_LIMA_NI) THEN
          TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_NAMES(1))//'T'
        END IF
    
    Gaelle TANGUY's avatar
    Gaelle TANGUY committed
    ! N IFN free
    
        IF (JSV .GE. NSV_LIMA_IFN_FREE .AND. JSV .LT. NSV_LIMA_IFN_NUCL) THEN
          WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_IFN_FREE + 1)
          TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_NAMES(2))//INDICE//'T'
        END IF
    
    Gaelle TANGUY's avatar
    Gaelle TANGUY committed
    ! N IFN nucl
    
        IF (JSV .GE. NSV_LIMA_IFN_NUCL .AND. JSV .LT. NSV_LIMA_IFN_NUCL + NMOD_IFN) THEN
          WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_IFN_NUCL + 1)
          TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_NAMES(3))//INDICE//'T'
        END IF
    
    Gaelle TANGUY's avatar
    Gaelle TANGUY committed
    ! N IMM nucl
    
        I = 0
        IF (JSV .GE. NSV_LIMA_IMM_NUCL .AND. JSV .LT. NSV_LIMA_IMM_NUCL + NMOD_IMM) THEN
          I = I + 1
          WRITE(INDICE,'(I2.2)')(NINDICE_CCN_IMM(I))
          TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_NAMES(4))//INDICE//'T'
        END IF
    
    Gaelle TANGUY's avatar
    Gaelle TANGUY committed
    ! Hom. freez. of CCN
    
        IF (JSV .EQ. NSV_LIMA_HOM_HAZE) THEN
          TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_NAMES(5))//'T'
        END IF
        !
        TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
    
        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
    
    Gaelle TANGUY's avatar
    Gaelle TANGUY committed
    !
    
    Gaelle TANGUY's avatar
    Gaelle TANGUY committed
      END DO
    !
      IF (LSCAV .AND. LAERO_MASS) THEN
      IF (ASSOCIATED(XINPAP)) THEN
      IF (SIZE(XINPAP) /= 0 ) THEN
    
        !
        ZWORK2D(:,:)  = XRHOLW*XINPRR(:,:)*XSVT(:,:,2,NSV_LIMA_SCAVMASS)/ &
    
    Gaelle TANGUY's avatar
    Gaelle TANGUY committed
                                            max( 1.e-20,XRT(:,:,2,3) ) !~2=at ground level
    
        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
    
    Gaelle TANGUY's avatar
    Gaelle TANGUY committed
      END IF
      END IF
      END IF
    !
    !
    
      ! electrical scalar variables
    
      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
    
      IF (CELEC /= 'NONE') THEN
    
        CALL IO_WRITE_FIELD(TPFILE,'EFIELDU',XEFIELDU)
        CALL IO_WRITE_FIELD(TPFILE,'EFIELDV',XEFIELDV)
        CALL IO_WRITE_FIELD(TPFILE,'EFIELDW',XEFIELDW)
    
        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
    
        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,XNI_IAGGS*1.E12)
    
        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,XNI_IDRYG*1.E12)
    
        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,XNI_SDRYG*1.E12)
    
        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,XIND_RATE*1.E12)
    
        CALL IO_WRITE_FIELD(TPFILE,'TRIG_IC',   NMAP_TRIG_IC)
        CALL IO_WRITE_FIELD(TPFILE,'IMPACT_CG', NMAP_IMPACT_CG)
        CALL IO_WRITE_FIELD(TPFILE,'AREA_CG',   NMAP_2DAREA_CG)
        CALL IO_WRITE_FIELD(TPFILE,'AREA_IC',   NMAP_2DAREA_IC)
        CALL IO_WRITE_FIELD(TPFILE,'FLASH_3DCG',NMAP_3DCG)
        CALL IO_WRITE_FIELD(TPFILE,'FLASH_3DIC',NMAP_3DIC)
    
     !
        IF (LLNOX_EXPLICIT) THEN
    
          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,XSVT(:,:,:,NSV_LNOXEND))
    
      END IF
      ! lagrangian variables
    
      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,XSVT(:,:,:,JSV))
    
      ! Passive scalar variables        
    
        TZFIELD%CSTDNAME   = ''
        TZFIELD%CUNITS     = 'kg kg-1'
        TZFIELD%CDIR       = 'XY'
        TZFIELD%NGRID      = 1
        TZFIELD%NTYPE      = TYPEREAL
        TZFIELD%NDIMS      = 3
        !
    
          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,XSVT(:,:,:,JSV))
    
      IF ( ((CCLOUD == 'KHKO') .OR.(CCLOUD == 'C2R2')) .AND. (.NOT. LSUPSAT)) THEN
    
        CALL IO_WRITE_FIELD(TPFILE,'SUPSATMAX',XSUPSAT(:,:,:))
        CALL IO_WRITE_FIELD(TPFILE,'NACT',     XNACT(:,:,:))
    
      END IF
      IF ( ((CCLOUD == 'KHKO') .OR.(CCLOUD == 'C2R2')) .AND. LSUPSAT) THEN
    
        CALL IO_WRITE_FIELD(TPFILE,'SSPRO',XSSPRO(:,:,:))
        CALL IO_WRITE_FIELD(TPFILE,'NPRO', XNPRO(:,:,:))
    
    #ifdef MNH_FOREFIRE
      ! ForeFire scalar variables
    
        TZFIELD%CSTDNAME   = ''
        TZFIELD%CUNITS     = 'kg kg-1'
        TZFIELD%CDIR       = 'XY'
        TZFIELD%NGRID      = 1
        TZFIELD%NTYPE      = TYPEREAL
        TZFIELD%NDIMS      = 3
        !
    
          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,XSVT(:,:,:,JSV))
    
      ! Conditional sampling variables  
    
        TZFIELD%CSTDNAME   = ''
        TZFIELD%CUNITS     = 'kg kg-1'
        TZFIELD%CDIR       = 'XY'
        TZFIELD%NGRID      = 1
        TZFIELD%NTYPE      = TYPEREAL
        TZFIELD%NDIMS      = 3
        !
    
          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,XSVT(:,:,:,JSV))
    
      ! number of chemical variables (chem+aero+dust)
      ICH_NBR = 0
      IF (LUSECHEM) ICH_NBR = ICH_NBR +NSV_CHEMEND-NSV_CHEMBEG+1 
      IF (LUSECHIC) ICH_NBR = ICH_NBR +NSV_CHICEND-NSV_CHICBEG+1
      IF (.NOT.LUSECHEM.AND.LCH_CONV_LINOX) ICH_NBR = ICH_NBR + &
                                                      NSV_LNOXEND-NSV_LNOXBEG+1 
      IF (LORILAM)  ICH_NBR = ICH_NBR +NSV_AEREND -NSV_AERBEG+1 
      IF (LDUST)    ICH_NBR = ICH_NBR +NSV_DSTEND -NSV_DSTBEG+1
      IF (LDEPOS_DST(IMI))  ICH_NBR = ICH_NBR +NSV_DSTDEPEND -NSV_DSTDEPBEG+1 
      IF (LDEPOS_SLT(IMI))  ICH_NBR = ICH_NBR +NSV_SLTDEPEND -NSV_SLTDEPBEG+1 
      IF (LDEPOS_AER(IMI))  ICH_NBR = ICH_NBR +NSV_AERDEPEND -NSV_AERDEPBEG+1 
      IF (LSALT)    ICH_NBR = ICH_NBR +NSV_SLTEND -NSV_SLTBEG+1
      IF (ICH_NBR /=0) ALLOCATE(YCHNAMES(ICH_NBR))
      ! chemical scalar variables
      IF (LUSECHEM) THEN
    
        TZFIELD%CSTDNAME   = ''
        TZFIELD%CUNITS     = ''
        TZFIELD%CDIR       = 'XY'
        TZFIELD%NGRID      = 1
        TZFIELD%NTYPE      = TYPEREAL
        TZFIELD%NDIMS      = 3
        !
    
        DO JSV = NSV_CHEMBEG,NSV_CHEMEND
    
          TZFIELD%CMNHNAME   = TRIM(UPCASE(CNAMES(JSV-NSV_CHEMBEG+1)))//'T'
          TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
          WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (ppp)'
    
          CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
    
          !
          YCHNAMES(JSV-JSA)=TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1) ! without T