Skip to content
Snippets Groups Projects
write_lfin.f90 76.6 KiB
Newer Older
!MNH_LIC Copyright 1994-2018 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.
!-----------------------------------------------------------------
!     #########################
      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
!!       JP Chaboureau 27/11/2017 add wind tendency forcing
!!                   02/2018 Q.Libois move Diagnostic related to the radiations in radiations.f90
!!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
!!       V. Vionnet    07/2017, add blowing snow variables
!!                   
!-------------------------------------------------------------------------------
!
!*       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_BLOWSNOW
USE MODD_BLOWSNOW_n
USE MODD_PAST_FIELD_n
USE MODD_ADV_n, ONLY: CUVW_ADV_SCHEME,XRTKEMS,CTEMP_SCHEME,LSPLIT_CFL
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_FM,    ONLY: IO_FILE_CLOSE_ll
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_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()
!
ILUOUT=TLUOUT%NLU
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)
!
  CALL IO_WRITE_FIELD(TPFILE,'LONOR',ZLONOR)
  CALL IO_WRITE_FIELD(TPFILE,'LATOR',ZLATOR)
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)
CALL IO_WRITE_FIELD(TPFILE,'ZTOP',XZTOP)
! #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%CUNITS     = 'm s-1'
  TZFIELD%CCOMMENT   = 'X_Y_Z_U component of mean wind'
  ZWORK3D = XUM_MEAN/MEAN_COUNT
  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%CUNITS     = 'm s-1'
  TZFIELD%CCOMMENT   = 'X_Y_Z_U component of max wind'
  TZFIELD%CUNITS     = 'm s-1'
  TZFIELD%CCOMMENT   = 'X_Y_Z_V component of mean wind'
  ZWORK3D = XVM_MEAN/MEAN_COUNT
  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%CUNITS     = 'm s-1'
  TZFIELD%CCOMMENT   = 'X_Y_Z_V component of max wind'
  TZFIELD%CUNITS     = 'm s-1'
  TZFIELD%CCOMMENT   = 'X_Y_Z_vertical mean wind'
  ZWORK3D = XWM_MEAN/MEAN_COUNT
  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%CUNITS     = 'm s-1'
  TZFIELD%CCOMMENT   = 'X_Y_Z_vertical max wind'
!
  TZFIELD%NGRID      = 1
!
  TZFIELD%CMNHNAME   = 'THMME'
  TZFIELD%CUNITS     = 'K'
  TZFIELD%CCOMMENT   = 'X_Y_Z_mean potential temperature'
  ZWORK3D = XTHM_MEAN/MEAN_COUNT
  TZFIELD%CUNITS     = 'K2'
  TZFIELD%CCOMMENT   = 'X_Y_Z_mean potential temperature variance'
  ZWORK3D = XTH2_MEAN/MEAN_COUNT-XTHM_MEAN**2/MEAN_COUNT**2
  TZFIELD%CUNITS     = 'K'
  TZFIELD%CCOMMENT   = 'X_Y_Z_max potential temperature'
  TZFIELD%CUNITS     = 'K'
  TZFIELD%CCOMMENT   = 'X_Y_Z_mean temperature'
  ZWORK3D = XTEMPM_MEAN/MEAN_COUNT
  TZFIELD%CUNITS     = 'K2'
  TZFIELD%CCOMMENT   = 'X_Y_Z_mean temperature variance'
  ZWORK3D = XTEMP2_MEAN/MEAN_COUNT-XTEMPM_MEAN**2/MEAN_COUNT**2
  TZFIELD%CUNITS     = 'K'
  TZFIELD%CCOMMENT   = 'X_Y_Z_max temperature'
  TZFIELD%CUNITS     = 'Pa'
  TZFIELD%CCOMMENT   = 'X_Y_Z_mean ABSolute Pressure'
  ZWORK3D = XPABSM_MEAN/MEAN_COUNT
  TZFIELD%CUNITS     = 'Pa2'
  TZFIELD%CCOMMENT   = 'X_Y_Z_mean ABSolute Pressure variance'
  ZWORK3D = XPABS2_MEAN/MEAN_COUNT-XPABSM_MEAN**2/MEAN_COUNT**2
  TZFIELD%CUNITS     = 'Pa'
  TZFIELD%CCOMMENT   = 'X_Y_Z_max ABSolute Pressure'
!
  IF (CTURB /= 'NONE') THEN
    TZFIELD%CUNITS     = 'm2 s-2'
    TZFIELD%CCOMMENT   = 'X_Y_Z_mean kinetic energy'
    ZWORK3D= XTKEM_MEAN/MEAN_COUNT
    TZFIELD%CUNITS     = 'm2 s-2'
    TZFIELD%CCOMMENT   = 'X_Y_Z_max kinetic energy'
!
END IF
!
!
IF (CTURB /= 'NONE') THEN
  IF (CPROGRAM == 'MESONH' .AND. LSPLIT_CFL) 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  = 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  = 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  = 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
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  = 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%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  = 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  = 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  = 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  = 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  = 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  = TRIM(TZFIELD%CMNHNAME)
      TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
! Blowing snow variables
  IF (LBLOWSNOW) THEN
    TZFIELD%CSTDNAME   = ''
    TZFIELD%CUNITS     = 'kg kg-1'
    TZFIELD%CDIR       = 'XY'
    TZFIELD%NGRID      = 1
    TZFIELD%NTYPE      = TYPEREAL
    TZFIELD%NDIMS      = 3
    TZFIELD%LTIMEDEP   = .TRUE.
    DO JSV = NSV_SNWBEG,NSV_SNWEND
      TZFIELD%CMNHNAME=TRIM(CSNOWNAMES(JSV-NSV_SNWBEG+1))//'T'
      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
      WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
      JSA=JSA+1
    END DO
    TZFIELD%CSTDNAME   = ''
    TZFIELD%CUNITS     = 'kg kg-1'
    TZFIELD%CDIR       = 'XY'
    TZFIELD%NGRID      = 1
    TZFIELD%NTYPE      = TYPEREAL
    TZFIELD%NDIMS      = 2
    TZFIELD%LTIMEDEP   = .TRUE.
    DO JSV = 1,(NSV_SNW)
      WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SNOWCANO_M',JSV
      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
      WRITE(TZFIELD%CCOMMENT,'(A6,A8,I3.3)')'X_Y_Z_','SNOWCANO',JSV
      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSNWCANO(:,:,JSV))
      JSA=JSA+1
    END DO
  ENDIF
  ! 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  = TRIM(TZFIELD%CMNHNAME)
      TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))