Skip to content
Snippets Groups Projects
write_lfin.f90 80.5 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
    !-----------------------------------------------------------------
    ! $Source$ $Revision$
    
    ! masdev4_7 BUG1 2007/06/20 16:58:20
    
    !-----------------------------------------------------------------
    !     #########################
          MODULE MODI_WRITE_LFIFM_n
    !     #########################
    !
    INTERFACE
    !
    SUBROUTINE WRITE_LFIFM_n(HFMFILE,HDADFILE)
    CHARACTER(LEN=28), INTENT(IN) :: HFMFILE      ! Name of FM-file to write
    CHARACTER(LEN=28), 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(HFMFILE,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 HFMFILE//'.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 HFMFILE 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
    
    !!                   
    !-------------------------------------------------------------------------------
    !
    !*       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
    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
    
    !
    USE MODE_FMWRIT
    USE MODE_ll
    USE MODE_IO_ll, ONLY: UPCASE,CLOSE_ll
    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
    !
    #ifdef MNH_NCWRIT
    USE MODN_NCOUT
    USE MODE_UTIL
    #endif
    !
    
    !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
    !
    ! 
    IMPLICIT NONE
    !
    !*       0.1   Declarations of arguments
    !
    CHARACTER(LEN=28), INTENT(IN) :: HFMFILE      ! Name of FM-file to write
    CHARACTER(LEN=28), 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           :: IGRID          ! IGRID : grid indicator
    INTEGER           :: ILENCH         ! ILENCH : length of comment string 
    !
    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
    !-------------------------------------------------------------------------------
    !
    !*	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    HFMFILE and HDADFILE writing :
    !
    YDIR='--'
    !
    YRECFM='MASDEV'
    YCOMMENT=' '
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,NMASDEV,IGRID,ILENCH,YCOMMENT,IRESP)
    ! 
    YRECFM='BUGFIX'
    YCOMMENT=' '
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,NBUGFIX,IGRID,ILENCH,YCOMMENT,IRESP)
    !
    YRECFM='BIBUSER'
    YCOMMENT=' '
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,CBIBUSER,IGRID,ILENCH,YCOMMENT,IRESP)
    !
    YRECFM='PROGRAM'
    YCOMMENT=' '
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,CPROGRAM,IGRID,ILENCH,YCOMMENT,IRESP)
    !
    !
    YRECFM='MY_NAME'
    YCOMMENT=' '
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,HFMFILE,IGRID,ILENCH,YCOMMENT,IRESP)
    !
    YRECFM='DAD_NAME'
    YCOMMENT=' '
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,HDADFILE,IGRID,ILENCH,YCOMMENT,IRESP)
    !
    IF (LEN_TRIM(HDADFILE)>0) THEN
      CALL FMWRIT(HFMFILE,'DXRATIO',CLUOUT,YDIR,NDXRATIO_ALL(IMI),0,ILENCH,YCOMMENT,IRESP)
      CALL FMWRIT(HFMFILE,'DYRATIO',CLUOUT,YDIR,NDYRATIO_ALL(IMI),0,ILENCH,YCOMMENT,IRESP)
      CALL FMWRIT(HFMFILE,'XOR' ,CLUOUT,YDIR,NXOR_ALL(IMI) ,0,ILENCH,YCOMMENT,IRESP)
      CALL FMWRIT(HFMFILE,'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(HFMFILE,YRECFM,CLUOUT,YDIR,CSTORAGE_TYPE,IGRID,ILENCH,YCOMMENT,IRESP)
    !
    YRECFM='IMAX'
    YCOMMENT=' '
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,NIMAX_ll,IGRID,ILENCH,YCOMMENT,IRESP)
    !
    YRECFM='JMAX'
    YCOMMENT=' '
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,NJMAX_ll,IGRID,ILENCH,YCOMMENT,IRESP)
    !
    
    YRECFM='JPHEXT'
    YCOMMENT=' '
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,JPHEXT,IGRID,ILENCH,YCOMMENT,IRESP)
    !
    
    YRECFM='KMAX'
    YCOMMENT=' '
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    CALL FMWRIT(HFMFILE,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(HFMFILE,YRECFM,CLUOUT,YDIR,XRPK,IGRID,ILENCH,YCOMMENT,IRESP)
    ! 
      YRECFM='LONORI'
      YCOMMENT='DEGREES'
      IGRID=0
      ILENCH=LEN(YCOMMENT)
      CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XLONORI,IGRID,ILENCH,YCOMMENT,IRESP)
    !
      YRECFM='LATORI'
      YCOMMENT='DEGREES'
      IGRID=0
      ILENCH=LEN(YCOMMENT)
      CALL FMWRIT(HFMFILE,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(HFMFILE,YRECFM,CLUOUT,YDIR,ZLONOR,IGRID,ILENCH,YCOMMENT,IRESP)
    !
      YRECFM='LATOR'
      YCOMMENT='DEGREES'
      IGRID=0
      ILENCH=LEN(YCOMMENT)
      CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,ZLATOR,IGRID,ILENCH,YCOMMENT,IRESP)
    END IF 
    !
    YRECFM='THINSHELL'
    YCOMMENT=' '
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,LTHINSHELL,IGRID,ILENCH,YCOMMENT,IRESP)
    !
    YRECFM='LAT0'
    YCOMMENT='reference latitude for conformal projection (DEGREES)'
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XLAT0,IGRID,ILENCH,YCOMMENT,IRESP)
    ! 
    YRECFM='LON0'
    YCOMMENT='reference longitude for conformal projection (DEGREES)'
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XLON0,IGRID,ILENCH,YCOMMENT,IRESP)
    !
    YRECFM='BETA'
    YCOMMENT='rotation angle (DEGREES)'
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    CALL FMWRIT(HFMFILE,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(HFMFILE,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(HFMFILE,YRECFM,CLUOUT,YDIR,XYHAT,IGRID,ILENCH,YCOMMENT,IRESP)
    !
    YRECFM='ZHAT'
    YDIR='--'
    YCOMMENT='height level without orography (METERS)'
    IGRID=4
    ILENCH=LEN(YCOMMENT)
    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XZHAT,IGRID,ILENCH,YCOMMENT,IRESP)
    #ifdef MNH_NCWRIT
    IF (LNETCDF.AND..NOT.LCARTESIAN) THEN
     LLFIFM = .FALSE.
     YRECFM='LAT'
     YCOMMENT='X_Y_latitude (degree)'
     IGRID=1
     ILENCH=LEN(YCOMMENT)
     CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'XY',XLAT,IGRID,ILENCH,YCOMMENT,IRESP)
    
     YRECFM='LON'
     YCOMMENT='X_Y_longitude (degree)'
     IGRID=1
     ILENCH=LEN(YCOMMENT)
     CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'XY',XLON,IGRID,ILENCH,YCOMMENT,IRESP)
     LLFIFM = .TRUE.
    END IF
    !
    !*SB*MAY2012
    !*SB* * WRITE ALT
    IF (LNETCDF) THEN
     YRECFM='ALT'
     YCOMMENT='X_Y_Z_ALTitude (M)'
     IGRID=4
     ILENCH=LEN(YCOMMENT)
     CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'XY',XZZ,IGRID,ILENCH,YCOMMENT,IRESP)
    END IF
    #endif 
    
    IF (.NOT.LCARTESIAN) THEN
     YRECFM='LAT'
     YCOMMENT='X_Y_latitude (degree)'
     IGRID=1
     ILENCH=LEN(YCOMMENT)
     CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'XY',XLAT,IGRID,ILENCH,YCOMMENT,IRESP)
    
     YRECFM='LON'
     YCOMMENT='X_Y_longitude (degree)'
     IGRID=1
     ILENCH=LEN(YCOMMENT)
     CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'XY',XLON,IGRID,ILENCH,YCOMMENT,IRESP)
    END IF
    
    !
    YRECFM='ZS'
    YDIR='XY'
    YCOMMENT='orography (METERS)'
    IGRID=4
    ILENCH=LEN(YCOMMENT)
    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XZS,IGRID,ILENCH,YCOMMENT,IRESP)
    !
    YRECFM='ZSMT'
    YDIR='XY'
    YCOMMENT='smooth orography (METERS)'
    IGRID=4
    ILENCH=LEN(YCOMMENT)
    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XZSMT,IGRID,ILENCH,YCOMMENT,IRESP)
    !
    YRECFM='SLEVE'
    YDIR='--'
    YCOMMENT=''
    IGRID=4
    ILENCH=LEN(YCOMMENT)
    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,LSLEVE,IGRID,ILENCH,YCOMMENT,IRESP)
    !
    IF (LSLEVE) THEN
      YRECFM='LEN1'
      YDIR='--'
      YCOMMENT=''
      IGRID=4
      ILENCH=LEN(YCOMMENT)
      CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XLEN1,IGRID,ILENCH,YCOMMENT,IRESP)
      !
      YRECFM='LEN2'
      YDIR='--'
      YCOMMENT=''
      IGRID=4
      ILENCH=LEN(YCOMMENT)
      CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XLEN2,IGRID,ILENCH,YCOMMENT,IRESP)
    END IF
    !
    YDIR='--'
    !
    YRECFM='DTCUR'
    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,TDTCUR,IGRID,ILENCH,YCOMMENT,IRESP)
    !
    YRECFM='DTEXP'
    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,TDTEXP,IGRID,ILENCH,YCOMMENT,IRESP)
    !
    YRECFM='DTMOD'
    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,TDTMOD,IGRID,ILENCH,YCOMMENT,IRESP)
    !
    YRECFM='DTSEG'
    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,TDTSEG,IGRID,ILENCH,YCOMMENT,IRESP)
    !
    !*       1.3    Configuration  variables :
    !
    YRECFM='L1D'
    YCOMMENT='  '
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,L1D,IGRID,ILENCH,YCOMMENT,IRESP)
    !
    YRECFM='L2D'
    YCOMMENT='  '
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,L2D,IGRID,ILENCH,YCOMMENT,IRESP)
    !
    YRECFM='PACK'
    YCOMMENT='  '
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,LPACK,IGRID,ILENCH,YCOMMENT,IRESP)
    !
    YRECFM='CARTESIAN'
    YCOMMENT='Logical for cartesian geometry'
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,LCARTESIAN,IGRID,ILENCH,YCOMMENT,IRESP)
    !
    YRECFM='LBOUSS'       
    YCOMMENT='Logical for boussinesq'         
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,LBOUSS,IGRID,ILENCH,YCOMMENT,IRESP)
    !
    YRECFM='SURF'
    YCOMMENT='  '
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,CSURF,IGRID,ILENCH,YCOMMENT,IRESP)
    !
    YRECFM='CPL_AROME'
    YCOMMENT='Logical for arome coupling file'
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,LCPL_AROME,IGRID,ILENCH,YCOMMENT,IRESP)
    !
    
    YRECFM='COUPLING'
    YCOMMENT='Logical for coupling file'
    IGRID=0
    ILENCH=LEN(YCOMMENT)
    CALL FMWRIT(HFMFILE,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 FMWRIT::XUT",PRECISION)
    
    YRECFM='UT'
    
    YCOMMENT='X_Y_Z_U component of wind (m/s)'
    IGRID=2
    ILENCH=LEN(YCOMMENT)
    
    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XUT,IGRID,ILENCH,YCOMMENT,IRESP)
    
    CALL MPPDB_CHECK3D(XUT,"write_lfifmn after FMWRIT::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(HFMFILE,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(HFMFILE,YRECFM,CLUOUT,YDIR,XWT,IGRID,ILENCH,YCOMMENT,IRESP)
    
    YRECFM='THT'
    
    YCOMMENT='X_Y_Z_potential temperature (K)'
    IGRID=1
    ILENCH=LEN(YCOMMENT)
    
    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XTHT,IGRID,ILENCH,YCOMMENT,IRESP)
    
    !*       1.4.2  Time t-dt:
    
    IF ( CUVW_ADV_SCHEME == 'CEN4TH' ) THEN
      YRECFM='UM'
      YCOMMENT='X_Y_Z_U component of wind (m/s)'
      IGRID=2
      ILENCH=LEN(YCOMMENT)
      CALL FMWRIT(HFMFILE,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(HFMFILE,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(HFMFILE,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(HFMFILE,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(HFMFILE,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(HFMFILE,YRECFM,CLUOUT,YDIR,XDWM,IGRID,ILENCH,YCOMMENT,IRESP)
    !
    END IF
    
    
    
    
    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(HFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP)
    !
    
      YCOMMENT='X_Y_Z_U component of mean wind (m/s)'
      IGRID=2
      ILENCH=LEN(YCOMMENT)
      ZWORK3D = XU2_MEAN/MEAN_COUNT-XUM_MEAN**2/MEAN_COUNT**2
      CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,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(HFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP)
    !
    
      YCOMMENT='X_Y_Z_V component of mean wind (m/s)'
      IGRID=3
      ILENCH=LEN(YCOMMENT)
      ZWORK3D = XV2_MEAN/MEAN_COUNT-XVM_MEAN**2/MEAN_COUNT**2
      CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,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(HFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP)
      !
    
      YCOMMENT='X_Y_Z_vertical mean wind (m/s)'
      IGRID=4
      ILENCH=LEN(YCOMMENT)
      ZWORK3D = XW2_MEAN/MEAN_COUNT-XWM_MEAN**2/MEAN_COUNT**2
      CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP)
    !
    
      YCOMMENT='X_Y_Z_mean potential temperature (K)'
      IGRID=1
      ILENCH=LEN(YCOMMENT)
      ZWORK3D = XTHM_MEAN/MEAN_COUNT
      CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP)
      !
    
      YCOMMENT='X_Y_Z_mean potential temperature (K)'
      IGRID=1
      ILENCH=LEN(YCOMMENT)
      ZWORK3D = XTH2_MEAN/MEAN_COUNT-XTHM_MEAN**2/MEAN_COUNT**2
      CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP)
      !
    
      YCOMMENT='X_Y_Z_mean potential temperature (K)'
      IGRID=1
      ILENCH=LEN(YCOMMENT)
      ZWORK3D= XTEMPM_MEAN/MEAN_COUNT
      CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP)
      !
    
      YCOMMENT='X_Y_Z_mean potential temperature (K)'
      IGRID=1
      ILENCH=LEN(YCOMMENT)
      ZWORK3D = XTEMP2_MEAN/MEAN_COUNT-XTEMPM_MEAN**2/MEAN_COUNT**2
      CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP)
    !
    
      YCOMMENT='X_Y_Z_mean ABSolute Pressure (Pa)'
      IGRID=1
      ILENCH=LEN(YCOMMENT)
      ZWORK3D= XPABSM_MEAN/MEAN_COUNT
      CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP)
    !
    
      YCOMMENT='X_Y_Z_mean ABSolute Pressure (Pa)'
      IGRID=1
      ILENCH=LEN(YCOMMENT)
      ZWORK3D = XPABS2_MEAN/MEAN_COUNT-XPABSM_MEAN**2/MEAN_COUNT**2
      CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP)
    !
    
      YCOMMENT='X_Y_Z_mean ABSolute Pressure (Pa)'
      IGRID=1
      ILENCH=LEN(YCOMMENT)
      ZWORK3D= XTKEM_MEAN/MEAN_COUNT
      CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,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(HFMFILE,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(HFMFILE,YRECFM,CLUOUT,YDIR,XRTKEMS,IGRID,ILENCH,YCOMMENT,IRESP)  
    
    YRECFM='PABST'
    
    YCOMMENT='X_Y_Z_ABSolute Pressure (Pa)'
    IGRID=1
    ILENCH=LEN(YCOMMENT)
    
    CALL FMWRIT(HFMFILE,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(HFMFILE,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(HFMFILE,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(HFMFILE,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(HFMFILE,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(HFMFILE,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(HFMFILE,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(HFMFILE,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(HFMFILE,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(HFMFILE,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(HFMFILE,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(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,    &
    
                    YCOMMENT,IRESP)
        JSA=JSA+1
      END DO
      ! electrical scalar variables
      DO JSV = NSV_ELECBEG,NSV_ELECEND
    
        YRECFM=TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))//'T'
    
        IF (JSV .GT. NSV_ELECBEG .AND. JSV .LT. NSV_ELECEND) THEN 
    
          WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (C/m3)'
    
          WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (nb ions/m3)'
    
        END IF
        ILENCH=LEN(YCOMMENT)
        ZWORK3D(:,:,:) = 0.
    
        ZWORK3D(:,:,:) = XSVT(:,:,:,JSV) * XRHODREF(:,:,:) ! C/kg --> C/m3
    
        CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D(:,:,:),IGRID,ILENCH,    &
                    YCOMMENT,IRESP)
        JSA=JSA+1
      END DO
      IF (CELEC /= 'NONE') THEN
        YRECFM='EFIELDU'
        YCOMMENT='X_Y_Z_EFIELDU (V/m)'
        ILENCH=LEN(YCOMMENT)
        CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XEFIELDU(:,:,:),IGRID,ILENCH,    &
                    YCOMMENT,IRESP)
     !
        YRECFM='EFIELDV'
        YCOMMENT='X_Y_Z_EFIELDV (V/m)'
        ILENCH=LEN(YCOMMENT)
        CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XEFIELDV(:,:,:),IGRID,ILENCH,    &
                    YCOMMENT,IRESP)
     !
        YRECFM='EFIELDW'
        YCOMMENT='X_Y_Z_EFIELDW (V/m)'
        ILENCH=LEN(YCOMMENT)
        CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XEFIELDW(:,:,:),IGRID,ILENCH,    &
                    YCOMMENT,IRESP)
     !
        ZWORK3D(:,:,:) = 0.
        YRECFM='EMODULE'
        YCOMMENT='X_Y_Z_EMODULE (V/m)'
        ZWORK3D(:,:,:) = (XEFIELDU**2 + XEFIELDV**2 + XEFIELDW**2)**0.5
        ILENCH=LEN(YCOMMENT)
        CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D(:,:,:),IGRID,ILENCH,    &
                    YCOMMENT,IRESP)
     !
        ZWORK3D(:,:,:) = 0.
        YRECFM='NI_IAGGS'
        YCOMMENT='X_Y_Z_NI_IAGGS (pC/m3/s)'
        ILENCH=LEN(YCOMMENT)
        ZWORK3D(:,:,:) = XNI_IAGGS(:,:,:) * 1.E12
        CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D(:,:,:),IGRID,ILENCH,    &
                    YCOMMENT,IRESP)
     !
        ZWORK3D(:,:,:) = 0.
        YRECFM='NI_IDRYG'
        YCOMMENT='X_Y_Z_NI_IDRYG (pC/m3/s)'
        ILENCH=LEN(YCOMMENT)
        ZWORK3D(:,:,:) = XNI_IDRYG(:,:,:) * 1.E12
        CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D(:,:,:),IGRID,ILENCH,    &
                    YCOMMENT,IRESP)