Skip to content
Snippets Groups Projects
write_lfin.f90 87.8 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)
    
    CHARACTER(LEN=28), INTENT(IN) :: HDADFILE     ! corresponding FM-file name of 
                                                  ! its DAD model
    
    TYPE(TFILEDATA),   INTENT(IN) :: TPFILE ! File characteristics
    
    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: TFIELDDATA, 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
    !
    CHARACTER(LEN=28), INTENT(IN) :: HDADFILE     ! corresponding FM-file name of 
                                                  ! its DAD model
    
    TYPE(TFILEDATA),   INTENT(IN) :: TPFILE ! File characteristics
    
    !
    !*       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           :: 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
    
    ! 
    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=16),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
    INTEGER           :: I
    
    !-------------------------------------------------------------------------------
    
    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
    ! 
    !
    
    !*       1.0    YFMFILE and HDADFILE writing :
    
    CALL IO_WRITE_FIELD(TPFILE,'MASDEV',CLUOUT,IRESP,NMASDEV)
    
    ! 
    YRECFM='BUGFIX'
    YCOMMENT=' '
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    
    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,NBUGFIX,IGRID,ILENCH,YCOMMENT,IRESP)
    
    !
    YRECFM='BIBUSER'
    YCOMMENT=' '
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    
    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,CBIBUSER,IGRID,ILENCH,YCOMMENT,IRESP)
    
    !
    YRECFM='PROGRAM'
    YCOMMENT=' '
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    
    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,CPROGRAM,IGRID,ILENCH,YCOMMENT,IRESP)
    
    YRECFM='FILETYPE'
    YCOMMENT=' '
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    
    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,TPFILE%CTYPE,IGRID,ILENCH,YCOMMENT,IRESP)
    
    !
    YRECFM='MY_NAME'
    YCOMMENT=' '
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    
    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,YFMFILE,IGRID,ILENCH,YCOMMENT,IRESP)
    
    !
    YRECFM='DAD_NAME'
    YCOMMENT=' '
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    
    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,HDADFILE,IGRID,ILENCH,YCOMMENT,IRESP)
    
    !
    IF (LEN_TRIM(HDADFILE)>0) THEN
    
      CALL FMWRIT(YFMFILE,'DXRATIO',CLUOUT,YDIR,NDXRATIO_ALL(IMI),0,ILENCH,YCOMMENT,IRESP)
      CALL FMWRIT(YFMFILE,'DYRATIO',CLUOUT,YDIR,NDYRATIO_ALL(IMI),0,ILENCH,YCOMMENT,IRESP)
      CALL FMWRIT(YFMFILE,'XOR' ,CLUOUT,YDIR,NXOR_ALL(IMI) ,0,ILENCH,YCOMMENT,IRESP)
      CALL FMWRIT(YFMFILE,'YOR' ,CLUOUT,YDIR,NYOR_ALL(IMI) ,0,ILENCH,YCOMMENT,IRESP)
    
    END IF
    !
    !*       1.1    Type and Dimensions :
    !
    YRECFM='STORAGE_TYPE'
    YCOMMENT=' '
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    
    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,CSTORAGE_TYPE,IGRID,ILENCH,YCOMMENT,IRESP)
    
    !
    YRECFM='IMAX'
    YCOMMENT=' '
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    
    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,NIMAX_ll,IGRID,ILENCH,YCOMMENT,IRESP)
    
    !
    YRECFM='JMAX'
    YCOMMENT=' '
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    
    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,NJMAX_ll,IGRID,ILENCH,YCOMMENT,IRESP)
    
    YRECFM='JPHEXT'
    YCOMMENT=' '
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    
    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,JPHEXT,IGRID,ILENCH,YCOMMENT,IRESP)
    
    YRECFM='KMAX'
    YCOMMENT=' '
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    
    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,NKMAX,IGRID,ILENCH,YCOMMENT,IRESP)
    
    !
    !*       1.2    Grid variables :
    !
    IF (.NOT.LCARTESIAN) THEN
      YRECFM='RPK'
      YCOMMENT=' '
      IGRID=0
      ILENCH=LEN(YCOMMENT)
    
      CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XRPK,IGRID,ILENCH,YCOMMENT,IRESP)
    
    ! 
      YRECFM='LONORI'
      YCOMMENT='DEGREES'
      IGRID=0
      ILENCH=LEN(YCOMMENT)
    
      CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XLONORI,IGRID,ILENCH,YCOMMENT,IRESP)
    
    !
      YRECFM='LATORI'
      YCOMMENT='DEGREES'
      IGRID=0
      ILENCH=LEN(YCOMMENT)
    
      CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XLATORI,IGRID,ILENCH,YCOMMENT,IRESP)
    
    ! 
    !* 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)
    !
      YRECFM='LONOR'
      YCOMMENT='DEGREES'
      IGRID=0
      ILENCH=LEN(YCOMMENT)
    
      CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZLONOR,IGRID,ILENCH,YCOMMENT,IRESP)
    
    !
      YRECFM='LATOR'
      YCOMMENT='DEGREES'
      IGRID=0
      ILENCH=LEN(YCOMMENT)
    
      CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZLATOR,IGRID,ILENCH,YCOMMENT,IRESP)
    
    END IF 
    !
    YRECFM='THINSHELL'
    YCOMMENT=' '
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    
    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,LTHINSHELL,IGRID,ILENCH,YCOMMENT,IRESP)
    
    !
    YRECFM='LAT0'
    YCOMMENT='reference latitude for conformal projection (DEGREES)'
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    
    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XLAT0,IGRID,ILENCH,YCOMMENT,IRESP)
    
    ! 
    YRECFM='LON0'
    YCOMMENT='reference longitude for conformal projection (DEGREES)'
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    
    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XLON0,IGRID,ILENCH,YCOMMENT,IRESP)
    
    !
    YRECFM='BETA'
    YCOMMENT='rotation angle (DEGREES)'
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    
    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XBETA,IGRID,ILENCH,YCOMMENT,IRESP)
    
    ! 
    YRECFM='XHAT'
    YDIR='XX'
    YCOMMENT='Position x in the conformal or cartesian plane (METERS)'
    IGRID=2
    ILENCH=LEN(YCOMMENT)
    
    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XXHAT,IGRID,ILENCH,YCOMMENT,IRESP)
    
    !
    YRECFM='YHAT'
    YDIR='YY'
    YCOMMENT='Position y in the conformal or cartesian plane (METERS)'
    IGRID=3
    ILENCH=LEN(YCOMMENT)
    
    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XYHAT,IGRID,ILENCH,YCOMMENT,IRESP)
    
    !
    YRECFM='ZHAT'
    YDIR='--'
    YCOMMENT='height level without orography (METERS)'
    IGRID=4
    ILENCH=LEN(YCOMMENT)
    
    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XZHAT,IGRID,ILENCH,YCOMMENT,IRESP)
    
    ! #ifdef MNH_NCWRIT
    ! !
    ! !*SB*MAY2012
    ! !*SB* * WRITE ALT
    ! IF (LNETCDF) THEN
    !  YRECFM='ALT'
    !  YCOMMENT='X_Y_Z_ALTitude (M)'
    !  IGRID=4
    !  ILENCH=LEN(YCOMMENT)
    
    !  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XZZ,IGRID,ILENCH,YCOMMENT,IRESP)
    
    IF (.NOT.LCARTESIAN) THEN
     YRECFM='LAT'
     YCOMMENT='X_Y_latitude (degree)'
     IGRID=1
     ILENCH=LEN(YCOMMENT)
    
     CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XLAT,IGRID,ILENCH,YCOMMENT,IRESP)
    
    
     YRECFM='LON'
     YCOMMENT='X_Y_longitude (degree)'
     IGRID=1
     ILENCH=LEN(YCOMMENT)
    
     CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XLON,IGRID,ILENCH,YCOMMENT,IRESP)
    
    !
    YRECFM='ZS'
    YDIR='XY'
    YCOMMENT='orography (METERS)'
    IGRID=4
    ILENCH=LEN(YCOMMENT)
    
    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XZS,IGRID,ILENCH,YCOMMENT,IRESP)
    
    !
    YRECFM='ZSMT'
    YDIR='XY'
    YCOMMENT='smooth orography (METERS)'
    IGRID=4
    ILENCH=LEN(YCOMMENT)
    
    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XZSMT,IGRID,ILENCH,YCOMMENT,IRESP)
    
    !
    YRECFM='SLEVE'
    YDIR='--'
    YCOMMENT=''
    IGRID=4
    ILENCH=LEN(YCOMMENT)
    
    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,LSLEVE,IGRID,ILENCH,YCOMMENT,IRESP)
    
    !
    IF (LSLEVE) THEN
      YRECFM='LEN1'
      YDIR='--'
      YCOMMENT=''
      IGRID=4
      ILENCH=LEN(YCOMMENT)
    
      CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XLEN1,IGRID,ILENCH,YCOMMENT,IRESP)
    
      !
      YRECFM='LEN2'
      YDIR='--'
      YCOMMENT=''
      IGRID=4
      ILENCH=LEN(YCOMMENT)
    
      CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XLEN2,IGRID,ILENCH,YCOMMENT,IRESP)
    
    END IF
    !
    YDIR='--'
    !
    YRECFM='DTCUR'
    
    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,TDTCUR,IGRID,ILENCH,YCOMMENT,IRESP)
    
    !
    YRECFM='DTEXP'
    
    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,TDTEXP,IGRID,ILENCH,YCOMMENT,IRESP)
    
    !
    YRECFM='DTMOD'
    
    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,TDTMOD,IGRID,ILENCH,YCOMMENT,IRESP)
    
    !
    YRECFM='DTSEG'
    
    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,TDTSEG,IGRID,ILENCH,YCOMMENT,IRESP)
    
    !
    !*       1.3    Configuration  variables :
    !
    YRECFM='L1D'
    YCOMMENT='  '
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    
    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,L1D,IGRID,ILENCH,YCOMMENT,IRESP)
    
    !
    YRECFM='L2D'
    YCOMMENT='  '
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    
    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,L2D,IGRID,ILENCH,YCOMMENT,IRESP)
    
    !
    YRECFM='PACK'
    YCOMMENT='  '
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    
    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,LPACK,IGRID,ILENCH,YCOMMENT,IRESP)
    
    !
    YRECFM='CARTESIAN'
    YCOMMENT='Logical for cartesian geometry'
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    
    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,LCARTESIAN,IGRID,ILENCH,YCOMMENT,IRESP)
    
    !
    YRECFM='LBOUSS'       
    YCOMMENT='Logical for boussinesq'         
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    
    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,LBOUSS,IGRID,ILENCH,YCOMMENT,IRESP)
    
    !
    YRECFM='SURF'
    YCOMMENT='  '
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    
    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,CSURF,IGRID,ILENCH,YCOMMENT,IRESP)
    
    !
    YRECFM='CPL_AROME'
    YCOMMENT='Logical for arome coupling file'
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    
    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,LCPL_AROME,IGRID,ILENCH,YCOMMENT,IRESP)
    
    YRECFM='COUPLING'
    YCOMMENT='Logical for coupling file'
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    
    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,LCOUPLING,IGRID,ILENCH,YCOMMENT,IRESP)
    
    !*       1.4    Prognostic variables :
    !
    YDIR='XY'
    !
    
    !*       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 IO_WRITE_FIELD(TPFILE,'UT',CLUOUT,IRESP,XUT)
    
    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)
    
    YRECFM='VT'
    
    YCOMMENT='X_Y_Z_V component of wind (m/s)'
    IGRID=3
    ILENCH=LEN(YCOMMENT)
    
    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XVT,IGRID,ILENCH,YCOMMENT,IRESP)
    
    YRECFM='WT'
    
    YCOMMENT='X_Y_Z_vertical wind (m/s)'
    IGRID=4
    ILENCH=LEN(YCOMMENT)
    
    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XWT,IGRID,ILENCH,YCOMMENT,IRESP)
    
    YRECFM='THT'
    
    YCOMMENT='X_Y_Z_potential temperature (K)'
    IGRID=1
    ILENCH=LEN(YCOMMENT)
    
    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XTHT,IGRID,ILENCH,YCOMMENT,IRESP)
    
    !*       1.4.2  Time t-dt:
    
    
    IF ( (CUVW_ADV_SCHEME == 'CEN4TH') .AND. (CTEMP_SCHEME == 'LEFR') ) THEN
    
      YRECFM='UM'
      YCOMMENT='X_Y_Z_U component of wind (m/s)'
      IGRID=2
      ILENCH=LEN(YCOMMENT)
    
      CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XUM,IGRID,ILENCH,YCOMMENT,IRESP)
    
    !
      YRECFM='VM'
      YCOMMENT='X_Y_Z_V component of wind (m/s)'
      IGRID=3
      ILENCH=LEN(YCOMMENT)
    
      CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XVM,IGRID,ILENCH,YCOMMENT,IRESP)
    
    !
      YRECFM='WM'
      YCOMMENT='X_Y_Z_vertical wind (m/s)'
      IGRID=4
      ILENCH=LEN(YCOMMENT)
    
      CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XWM,IGRID,ILENCH,YCOMMENT,IRESP)
    
    !
       YRECFM='DUM'
      YCOMMENT='X_Y_Z_U component of wind (m/s)'
      IGRID=2
      ILENCH=LEN(YCOMMENT)
    
      CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XDUM,IGRID,ILENCH,YCOMMENT,IRESP)
    
    !
      YRECFM='DVM'
      YCOMMENT='X_Y_Z_V component of wind (m/s)'
      IGRID=3
      ILENCH=LEN(YCOMMENT)
    
      CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XDVM,IGRID,ILENCH,YCOMMENT,IRESP)
    
    !
      YRECFM='DWM'
      YCOMMENT='X_Y_Z_vertical wind (m/s)'
      IGRID=4
      ILENCH=LEN(YCOMMENT)
    
      CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XDWM,IGRID,ILENCH,YCOMMENT,IRESP)
    
    IF (MEAN_COUNT /= 0) THEN
    !
    
      YCOMMENT='X_Y_Z_U component of mean wind (m/s)'
      IGRID=2
      ILENCH=LEN(YCOMMENT)
      ZWORK3D = XUM_MEAN/MEAN_COUNT
    
      CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP)
    
      YCOMMENT='X_Y_Z_U component of mean wind variance(m2/s2)'
    
      IGRID=2
      ILENCH=LEN(YCOMMENT)
      ZWORK3D = XU2_MEAN/MEAN_COUNT-XUM_MEAN**2/MEAN_COUNT**2
    
      CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP)
    
      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)
    
      YCOMMENT='X_Y_Z_V component of mean wind (m/s)'
      IGRID=3
      ILENCH=LEN(YCOMMENT)
      ZWORK3D = XVM_MEAN/MEAN_COUNT
    
      CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP)
    
      YCOMMENT='X_Y_Z_V component of mean wind variance (m2/s2)'
    
      IGRID=3
      ILENCH=LEN(YCOMMENT)
      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)
    
      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)
    
      YCOMMENT='X_Y_Z_vertical mean wind  variance(m2/s2)'
    
      IGRID=4
      ILENCH=LEN(YCOMMENT)
      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)
    
      YCOMMENT='X_Y_Z_mean potential temperature (K)'
      IGRID=1
      ILENCH=LEN(YCOMMENT)
      ZWORK3D = XTHM_MEAN/MEAN_COUNT
    
      CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP)
    
      YCOMMENT='X_Y_Z_mean potential temperature variance (K2)'
    
      IGRID=1
      ILENCH=LEN(YCOMMENT)
      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)
    
      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)
    
      YCOMMENT='X_Y_Z_mean temperature variance (K2)'
    
      IGRID=1
      ILENCH=LEN(YCOMMENT)
      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)
    
      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)
    
      YCOMMENT='X_Y_Z_mean ABSolute Pressure variance(Pa2)'
    
      IGRID=1
      ILENCH=LEN(YCOMMENT)
      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)
    
    !
      IF (CTURB /= 'NONE') THEN
        YRECFM='TKEMME'
        YCOMMENT='X_Y_Z_mean kinetic energy (m2/s2)'
        IGRID=1
        ILENCH=LEN(YCOMMENT)
        ZWORK3D= XTKEM_MEAN/MEAN_COUNT
    
        CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP)
    
    !
        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)
    
    !
    END IF
    !
    !
    IF (CTURB /= 'NONE') THEN
    
      YRECFM='TKET'
    
      YCOMMENT='X_Y_Z_Turbulent Kinetic Energy (M**2/S**2)'
      IGRID=1
      ILENCH=LEN(YCOMMENT)
    
      CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XTKET,IGRID,ILENCH,YCOMMENT,IRESP)
    
     IF (CPROGRAM == 'MESONH') THEN
    
      YRECFM='TKEMS'
      YCOMMENT='X_Y_Z_Turbulent Kinetic Energy adv source (M**2/S**3)'
      IGRID=1
      ILENCH=LEN(YCOMMENT)
    
      CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XRTKEMS,IGRID,ILENCH,YCOMMENT,IRESP)  
    
    YRECFM='PABST'
    
    YCOMMENT='X_Y_Z_ABSolute Pressure (Pa)'
    IGRID=1
    ILENCH=LEN(YCOMMENT)
    
    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XPABST,IGRID,ILENCH,YCOMMENT,IRESP)
    
    !
    IF (NRR >=1) THEN
      IRR=0
      IGRID=1                                    ! individually in file 
      IF (LUSERV) THEN
        IRR   = IRR+1 
    
        YRECFM= 'RVT'
    
        YCOMMENT='X_Y_Z_Vapor mixing Ratio (KG/KG)'
        ILENCH=LEN(YCOMMENT)
    
        CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XRT(:,:,:,IRR),IGRID,ILENCH,  &
    
                    YCOMMENT,IRESP)
      END IF 
      IF (LUSERC) THEN
        IRR   = IRR+1 
    
        YRECFM= 'RCT'
    
        YCOMMENT='X_Y_Z_Cloud mixing Ratio (KG/KG)'
        ILENCH=LEN(YCOMMENT)
    
        CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XRT(:,:,:,IRR),IGRID,ILENCH,  &
    
                    YCOMMENT,IRESP)
    
        WRITE (ILUOUT,*) IRR,' RC min-max ',MIN_ll(XRT(:,:,:,IRR),INFO_ll),MAX_ll(XRT(:,:,:,IRR),INFO_ll)
    
      END IF
      IF (LUSERR) THEN
        IRR   = IRR+1 
    
        YRECFM= 'RRT'
    
        YCOMMENT='X_Y_Z_Rain mixing Ratio (KG/KG)'
        ILENCH=LEN(YCOMMENT)
    
        CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XRT(:,:,:,IRR),IGRID,ILENCH,  &
    
                    YCOMMENT,IRESP)
    
        WRITE (ILUOUT,*) IRR,' RR min-max ',MIN_ll(XRT(:,:,:,IRR),INFO_ll),MAX_ll(XRT(:,:,:,IRR),INFO_ll)
    
      END IF 
      IF (LUSERI) THEN
        IRR   = IRR+1 
    
        YRECFM= 'RIT'
    
        YCOMMENT='X_Y_Z_Ice mixing Ratio (KG/KG)'
        ILENCH=LEN(YCOMMENT)
    
        CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XRT(:,:,:,IRR),IGRID,ILENCH, &
    
                    YCOMMENT,IRESP)
    
        WRITE (ILUOUT,*) IRR,' RI min-max ',MIN_ll(XRT(:,:,:,IRR),INFO_ll),MAX_ll(XRT(:,:,:,IRR),INFO_ll)
        IF ( CPROGRAM == 'MESONH' .AND. CCLOUD(1:3) == 'ICE') THEN
          YRECFM= 'CIT'
          YCOMMENT='X_Y_Z_Cloud Ice concentration (/M3)'
          ILENCH=LEN(YCOMMENT)
    
          CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XCIT(:,:,:),   IGRID,ILENCH,  &
    
                      YCOMMENT,IRESP)
        END IF
    
      END IF 
      IF (LUSERS) THEN
        IRR   = IRR+1 
    
        YRECFM= 'RST'
    
        YCOMMENT='X_Y_Z_Snow mixing Ratio (KG/KG)'
        ILENCH=LEN(YCOMMENT)
    
        CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XRT(:,:,:,IRR),IGRID,ILENCH, &
    
                    YCOMMENT,IRESP)
    
        WRITE (ILUOUT,*) IRR,' RS min-max ',MINVAL(XRT(:,:,:,IRR)),MAXVAL(XRT(:,:,:,IRR))
    
      END IF
      IF (LUSERG) THEN
        IRR   = IRR+1 
    
        YRECFM= 'RGT'
    
        YCOMMENT='X_Y_Z_Graupel mixing Ratio (KG/KG)'
        ILENCH=LEN(YCOMMENT)
    
        CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XRT(:,:,:,IRR),IGRID,ILENCH,  &
    
                    YCOMMENT,IRESP)
    
        WRITE (ILUOUT,*) IRR,' RG min-max ',MINVAL(XRT(:,:,:,IRR)),MAXVAL(XRT(:,:,:,IRR))
    
      END IF 
      IF (LUSERH) THEN
        IRR   = IRR+1 
    
        YRECFM= 'RHT'
    
        YCOMMENT='X_Y_Z_Hail mixing Ratio (KG/KG)'
        ILENCH=LEN(YCOMMENT)
    
        CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XRT(:,:,:,IRR),IGRID,ILENCH,  &
    
                    YCOMMENT,IRESP)
      END IF 
    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
      ! microphysical C2R2 scheme scalar variables
      DO JSV = NSV_C2R2BEG,NSV_C2R2END
    
        YRECFM=TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+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
      ! 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
    
    Gaelle TANGUY's avatar
    Gaelle TANGUY committed
    !
    ! microphysical LIMA variables
    !
      DO JSV = NSV_LIMA_BEG,NSV_LIMA_END
    ! Nc
         IF (JSV .EQ. NSV_LIMA_NC) THEN
            YRECFM=TRIM(CLIMA_WARM_NAMES(1))//'T'
            WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (/kg)'
         END IF
    ! Nr
         IF (JSV .EQ. NSV_LIMA_NR) THEN