Skip to content
Snippets Groups Projects
write_desfmn.f90 26.3 KiB
Newer Older
!MNH_LIC Copyright 1994-2023 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_DESFM_n
!     #########################
!
INTERFACE
!
!
INTEGER,            INTENT(IN)  :: KMI        ! Model index
TYPE(TFILEDATA),    INTENT(IN)  :: TPDATAFILE ! Datafile
!
END SUBROUTINE WRITE_DESFM_n
!
END INTERFACE
!
END MODULE MODI_WRITE_DESFM_n
!
!
!     ###################################################
!     ###################################################
!
!!****  *WRITE_DESFM_n * - routine to write a descriptor file ( DESFM )
!!
!!    PURPOSE
!!    -------
!       The purpose of this routine is to write the descriptive part of a Mesonh
!     file (FM-file). The resulting file is called  DESFM. 
!       
!!
!!**  METHOD
!!    ------
!!     
!!     This routine writes in the file HDESFM, previously opened, the group of
!!     all the namelists used to specify a Mesonh simulation.
!!     If verbose option is high enough : NVERB>=5, the variables in descriptor
!!     file are printed on the right output-listing corresponding tomodel _n.
!!
!!    EXTERNAL
!!    --------
!!
!!
!!    IMPLICIT ARGUMENTS
!!    ------------------
!!
!!      Module MODN_LUNIT_n : contains declarations of namelist NAM_LUNITn
!!                           and module MODD_LUNIT_n 
!!
!!
!!      Module MODN_CONF_n : contains declaration of namelist NAM_CONFn and
!!                          uses module MODD_CONF1 (configuration variables
!!                             for  model _n )
!!
!!      Module MODN_DYN_n : contains declaration of namelist NAM_DYNn and
!!                         uses module MODD_DYN_n (dynamic control variables
!!                             for   model _n )
!!
!!      Module MODN_ADV_n : contains declaration of namelist NAM_ADVn and
!!                         uses module MODD_ADV_n (control variables for the
!!                         advection scheme for model _n )
!!
!!      Module MODN_PARAM_n : contains declaration of namelist NAM_PARAMn and
!!                         uses module MODD_PARAM_n (names of the physical
!!                         parameterizations for model _n )
!!
!!      Module MODN_PARAM_RAD_n : contains declaration of the control parameters
!!                                for calling the radiation scheme
!!
!!      Module MODN_PARAM_KAFR_n : contains declaration of control parameters
!!                                    for calling the deep convection scheme
!! 
!!      Module MODN_LBC_n : contains declaration of namelis NAM_LBCn and
!!                         uses module MODD_LBC_n (lateral boundary conditions)
!!
!!
!!      Module MODN_TURB_n : contains declaration of turbulence scheme options
!!                        present in the namelist
!!
!!      Module MODN_CONF : contains declaration of namelist NAM_CONF and 
!!                        uses module MODD_CONF (configuration variables) 
!!
!!      Module MODN_DYN : contains the  declaration of namelist NAM_DYN and
!!                        uses module MODD_DYN (dynamic control variables)
!!                         
!!      Module MODN_BUDGET : contains declaration of all the namelists
!!                        related to the budget computations
!!
!!      Module MODN_LES  : contains declaration of the control parameters
!!                                for Large Eddy Simulations' storages
!!      Module MODN_BLANK_n : contains declaration of MesoNH developper variables
!!                                for test and debugging purposes.
!!           
!!
!!    REFERENCE
!!    ---------
!!      None
!!      
!!
!!    AUTHOR
!!    ------
!!	V. Ducrocq       * Meteo France *
!!
!!    MODIFICATIONS
!!    -------------
!!      Original                      07/06/94 
!!      Updated      V.Ducrocq        06/09/94
!!      Updated      J.Stein          20/10/94 to include NAM_OUTn
!!      Updated      J.Stein          24/10/94 change routine name
!!      Updated      J.Stein          26/10/94 add the OWRIGET argument
!!      Updated      J.Stein          06/12/94 add the LS fields       
!!      Updated      J.Stein          09/01/95 add the turbulence scheme     
!!      Updated      J.Stein          09/01/95 add the 1D switch
!!      Updated      J.Stein          20/03/95 remove R from the historical var.
!!      Updated      Ph.Hereil        20/06/95 add the budgets
!!      Updated      J.-P. Pinty      15/09/95 add the radiations
!!      Updated      J.Vila           06/02/96 implementation of scalar
!!                                             advection schemes
!!      Updated      J.Stein          20/02/96 cleaning + add the LES namelist
!!      Modifications  25/04/96  (Suhre)  add NAM_BLANK
!!      Modifications  25/04/96  (Suhre)  add NAM_FRC
!!      Modifications  25/04/96  (Suhre)  add NAM_CH_MNHCn and NAM_CH_SOLVER
!!      Modifications  11/04/96  (Pinty)  add the ice concentration
!!      Modifications  11/01/97  (Pinty)  add the deep convection
!!      Temporary Modification (Masson 06/09/96) manual write of the first and
!!                              third namelists because of compiler version.
!!      Modifications  J.-P. Lafore   22/07/96 gridnesting implementation
!!      Modifications  J.-P. Lafore   29/07/96 add NAM_FMOUT (renamed in NAM_OUTPUT/NAM_BACKUP)
!!      Modifications  V. Masson      10/07/97 add NAM_PARAM_GROUNDn
!!      Modifications  V. Masson      28/07/97 supress LSTEADY_DMASS
!!      Modifications  P. Jabouille   03/10/01 LHORELAX_ modifications
!!      Modifications  P. Jabouille   12/03/02 conditional writing of namelists
!!      Modifications  J.-P. Pinty    29/11/02 add C3R5, ICE2, ICE4, CELEC
!!      Modification   V. Masson      01/2004  removes surface (externalization)
!!      Modification   P. Tulet       01/2005  add dust, orilam
!!      Modification                  05/2006  Remove EPS and OWRIGET
Gaelle TANGUY's avatar
Gaelle TANGUY committed
!!      Modification    01/2016  (JP Pinty) Add LIMA
!!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
!!      Modification   V. Vionnet     07/2017  add blowing snow variables
!!      Modification   F.Auguste      02/2021  add IBM
!!                     E.Jezequel     02/2021  add stations read from CSV file
!  A. Costes      12/2021: add Blaze fire model
!  P. Wautelet 27/04/2022: add namelist for profilers
!  P. Wautelet 13/07/2022: add namelist for flyers and balloons
!  P. Wautelet 19/01/2023: bugfix for ForeFire
!-------------------------------------------------------------------------------
!
!*       0.    DECLARATIONS
!              ------------
USE MODD_CONF
USE MODD_DYN_n,      ONLY: LHORELAX_SVLIMA, LHORELAX_SVFIRE
#ifdef MNH_FOREFIRE
USE MODD_FOREFIRE,   ONLY: LFOREFIRE
#endif
USE MODD_IBM_LSF,    ONLY: LIBM_LSF
USE MODD_IO,         ONLY: TFILEDATA
USE MODD_LUNIT_n,    ONLY: TLUOUT
USE MODD_NEB_n, ONLY: NEBN_INIT
USE MODD_PARAM_ICE_n, ONLY: PARAM_ICEN_INIT
USE MODD_PARAM_LIMA, ONLY: PARAM_LIMA_INIT
USE MODD_PARAM_MFSHALL_n, ONLY: PARAM_MFSHALLN_INIT
USE MODD_PROFILER_n, ONLY: LPROFILER
USE MODD_STATION_n,  ONLY: LSTATION
USE MODD_TURB_n, ONLY: TURBN_INIT
USE MODN_CONF
USE MODN_DYN
USE MODN_NESTING
USE MODN_BUDGET
USE MODN_LES
USE MODN_DYN_n
USE MODN_ADV_n
USE MODN_PARAM_KAFR_n
USE MODN_PARAM_n
USE MODN_PARAM_RAD_n
USE MODN_CONF_n
USE MODN_LUNIT_n
USE MODN_LBC_n
USE MODN_NUDGING_n
USE MODN_FRC
USE MODN_CH_MNHC_n
USE MODN_CH_SOLVER_n
USE MODN_PARAM_C2R2
USE MODN_PARAM_C1R3
USE MODN_ELEC
USE MODN_SERIES
USE MODN_SERIES_n 
USE MODN_CH_ORILAM
USE MODN_DUST
USE MODN_SALT
USE MODN_PASPOL
USE MODN_CONDSAMP
USE MODN_2D_FRC
USE MODN_LATZ_EDFLX
#ifdef MNH_FOREFIRE
USE MODN_FOREFIRE
#endif
USE MODN_BLOWSNOW_n
USE MODN_BLOWSNOW
USE MODN_PROFILER_n,     LDIAG_SURFRAD_PROF => LDIAG_SURFRAD
USE MODN_STATION_n,      LDIAG_SURFRAD_STAT => LDIAG_SURFRAD
!
IMPLICIT NONE
!
!*       0.1   declarations of arguments
!
INTEGER,            INTENT(IN)  :: KMI     ! Model index
TYPE(TFILEDATA),    INTENT(IN)  :: TPDATAFILE ! Datafile
!
!*       0.2   declarations of local variables
!
INTEGER :: ILUSEG  ! logical unit number of EXSEG file
INTEGER :: ILUOUT  ! Logical unit number for output-listing TLUOUT file
!
LOGICAL                     ::  GHORELAX_UVWTH,                               &
                                GHORELAX_RV,  GHORELAX_RC, GHORELAX_RR,       &
                                GHORELAX_RI,  GHORELAX_RS, GHORELAX_RG,       &
                                GHORELAX_TKE, GHORELAX_SVC2R2, GHORELAX_SVPP, &
                                GHORELAX_SVCS, GHORELAX_SVCHIC, GHORELAX_SVFIRE,&
#ifdef MNH_FOREFIRE
                                GHORELAX_SVFF,                                &
#endif
Gaelle TANGUY's avatar
Gaelle TANGUY committed
                                GHORELAX_SVCHEM, GHORELAX_SVC1R3,             &
                                GHORELAX_SVELEC, GHORELAX_SVLIMA,GHORELAX_SVSNW
LOGICAL                     ::  GHORELAX_SVDST, GHORELAX_SVSLT,  GHORELAX_SVAER
LOGICAL, DIMENSION(JPSVMAX) ::  GHORELAX_SV
!
!-------------------------------------------------------------------------------
!
!*       1.    UPDATE DESFM FILE
!              -----------------
!
CALL PRINT_MSG(NVERB_DEBUG,'IO','WRITE_DESFM_n','called for '//TRIM(TPDATAFILE%CNAME))
!
IF (.NOT.ASSOCIATED(TPDATAFILE%TDESFILE)) &
  CALL PRINT_MSG(NVERB_FATAL,'IO','WRITE_DESFM_n','TDESFILE not associated for '//TRIM(TPDATAFILE%CNAME))
!
CALL INIT_NAM_LUNITn
WRITE(UNIT=ILUSEG,NML=NAM_LUNITn)
IF (CPROGRAM/='MESONH') THEN
  LUSECI=.FALSE.
  NSV_USER = 0      
ENDIF
CALL INIT_NAM_CONFn
WRITE(UNIT=ILUSEG,NML=NAM_CONFn)
!
!
CALL INIT_NAM_DYNn
IF (CPROGRAM/='MESONH') THEN   ! impose default value for next simulation
  GHORELAX_UVWTH = LHORELAX_UVWTH
  GHORELAX_RV    = LHORELAX_RV
  GHORELAX_RC    = LHORELAX_RC
  GHORELAX_RR    = LHORELAX_RR
  GHORELAX_RI    = LHORELAX_RI
  GHORELAX_RS    = LHORELAX_RS
  GHORELAX_RG    = LHORELAX_RG
  GHORELAX_TKE   = LHORELAX_TKE
  GHORELAX_SV(:) = LHORELAX_SV(:)
  GHORELAX_SVC2R2= LHORELAX_SVC2R2
  GHORELAX_SVC1R3= LHORELAX_SVC1R3
Gaelle TANGUY's avatar
Gaelle TANGUY committed
  GHORELAX_SVLIMA= LHORELAX_SVLIMA
  GHORELAX_SVELEC= LHORELAX_SVELEC
  GHORELAX_SVCHEM= LHORELAX_SVCHEM
  GHORELAX_SVCHIC= LHORELAX_SVCHIC
  GHORELAX_SVDST = LHORELAX_SVDST
  GHORELAX_SVSLT = LHORELAX_SVSLT
  GHORELAX_SVPP  = LHORELAX_SVPP
  GHORELAX_SVFIRE  = LHORELAX_SVFIRE
#ifdef MNH_FOREFIRE
  GHORELAX_SVFF  = LHORELAX_SVFF
#endif
  GHORELAX_SVCS  = LHORELAX_SVCS 
  GHORELAX_SVAER = LHORELAX_SVAER
  GHORELAX_SVSNW = LHORELAX_SVSNW    
!
  LHORELAX_UVWTH = .FALSE.
  LHORELAX_RV    = .FALSE.
  LHORELAX_RC    = .FALSE.
  LHORELAX_RR    = .FALSE.
  LHORELAX_RI    = .FALSE.
  LHORELAX_RS    = .FALSE.
  LHORELAX_RG    = .FALSE.
  LHORELAX_TKE   = .FALSE.
  LHORELAX_SV(:) = .FALSE.
  LHORELAX_SVC2R2= .FALSE.
  LHORELAX_SVC1R3= .FALSE.
Gaelle TANGUY's avatar
Gaelle TANGUY committed
  LHORELAX_SVLIMA= .FALSE.
  LHORELAX_SVELEC= .FALSE.
  LHORELAX_SVCHEM= .FALSE.
  LHORELAX_SVCHIC= .FALSE.
  LHORELAX_SVLG  = .FALSE.
  LHORELAX_SVPP  = .FALSE.
  LHORELAX_SVFIRE  = .FALSE.
#ifdef MNH_FOREFIRE
  LHORELAX_SVFF  = .FALSE.
#endif
  LHORELAX_SVCS  = .FALSE.
  LHORELAX_SVDST= .FALSE.
  LHORELAX_SVSLT= .FALSE.
  LHORELAX_SVAER= .FALSE.
ELSE  !return to namelist meaning of LHORELAX_SV
  GHORELAX_SV(:) = LHORELAX_SV(:)
  LHORELAX_SV(NSV_USER+1:)=.FALSE. 
END IF
WRITE(UNIT=ILUSEG,NML=NAM_DYNn)
!
IF (LIBM_LSF) THEN
  !
  CALL INIT_NAM_IBM_PARAMn
  !
  WRITE(UNIT=ILUSEG,NML=NAM_IBM_PARAMn)
  !
  IF (CPROGRAM/='MESONH') THEN
    LIBM         = .FALSE.
    LIBM_TROUBLE = .FALSE.  
    CIBM_ADV     = 'NOTHIN' 
  END IF
  !
END IF
!
CALL INIT_NAM_ADVn
WRITE(UNIT=ILUSEG,NML=NAM_ADVn)
IF (CPROGRAM/='MESONH') THEN
  CTURB   = 'NONE'
  CRAD    = 'NONE'
  CCLOUD  = 'NONE'
  CDCONV  = 'NONE'
  CSCONV  = 'NONE'
  CELEC   = 'NONE'
  CACTCCN = 'NONE'
END IF
CALL INIT_NAM_PARAMn
WRITE(UNIT=ILUSEG,NML=NAM_PARAMn)
!
CALL INIT_NAM_PARAM_RADn
IF(CRAD /= 'NONE') WRITE(UNIT=ILUSEG,NML=NAM_PARAM_RADn)
#ifdef MNH_ECRAD
CALL INIT_NAM_PARAM_ECRADn
IF(CRAD /= 'NONE') WRITE(UNIT=ILUSEG,NML=NAM_PARAM_ECRADn)
#endif
!
CALL INIT_NAM_PARAM_KAFRn
IF(CDCONV /= 'NONE' .OR. CSCONV == 'KAFR') &
       WRITE(UNIT=ILUSEG,NML=NAM_PARAM_KAFRn)
!
IF (CSCONV == 'EDKF' ) CALL PARAM_MFSHALLN_INIT(CPROGRAM, TPDATAFILE, .FALSE., ILUSEG, .FALSE., .FALSE., .FALSE., 1)
!
CALL INIT_NAM_LBCn
WRITE(UNIT=ILUSEG,NML=NAM_LBCn)
!
CALL INIT_NAM_NUDGINGn
WRITE(UNIT=ILUSEG,NML=NAM_NUDGINGn)
!
IF(CTURB /= 'NONE') CALL TURBN_INIT(CPROGRAM, TPDATAFILE, .FALSE., ILUSEG, .FALSE., .FALSE., .FALSE., 1)
!
CALL NEBN_INIT(CPROGRAM, TPDATAFILE, .FALSE., ILUSEG, .FALSE., .FALSE., .FALSE., 1)
CALL INIT_NAM_BLANKn
WRITE(UNIT=ILUSEG,NML=NAM_BLANKn)
!
!IF (CPROGRAM/='MESONH') THEN
!  LUSECHEM   = .FALSE.
!  LORILAM    = .FALSE.
!  LDEPOS_AER = .FALSE.
!  LDUST      = .FALSE.
!  LDEPOS_DST = .FALSE.
!  LSALT      = .FALSE.
!  LDEPOS_SLT = .FALSE.
!  LPASPOL    = .FALSE.
!  LCONDSAMP  = .FALSE.
!END IF
CALL INIT_NAM_CH_MNHCn
IF(LUSECHEM .OR. LCH_CONV_LINOX .OR. LCH_CONV_SCAV) &
 WRITE(UNIT=ILUSEG,NML=NAM_CH_MNHCn)
!
CALL INIT_NAM_CH_SOLVERn
IF(LUSECHEM) WRITE(UNIT=ILUSEG,NML=NAM_CH_SOLVERn)
!
CALL INIT_NAM_BLOWSNOWn
IF(LBLOWSNOW) WRITE(UNIT=ILUSEG,NML=NAM_BLOWSNOWn)
IF(LBLOWSNOW) WRITE(UNIT=ILUSEG,NML=NAM_BLOWSNOW)
!
CALL INIT_NAM_PROFILERn
IF(LPROFILER) WRITE(UNIT=ILUSEG,NML=NAM_PROFILERn)
!
CALL INIT_NAM_STATIONn
IF(LSTATION) WRITE(UNIT=ILUSEG,NML=NAM_STATIONn)
!
IF(LDUST) WRITE(UNIT=ILUSEG,NML=NAM_DUST)
IF(LSALT) WRITE(UNIT=ILUSEG,NML=NAM_SALT)
IF(LPASPOL) WRITE(UNIT=ILUSEG,NML=NAM_PASPOL)
IF(LFOREFIRE) WRITE(UNIT=ILUSEG,NML=NAM_FOREFIRE)
IF(LCONDSAMP) WRITE(UNIT=ILUSEG,NML=NAM_CONDSAMP)
IF(LORILAM.AND.LUSECHEM) WRITE(UNIT=ILUSEG,NML=NAM_CH_ORILAM)
!
CALL INIT_NAM_SERIESn
IF(LSERIES) WRITE(UNIT=ILUSEG,NML=NAM_SERIESn)
IF(L2D_ADV_FRC .OR. L2D_REL_FRC) WRITE(UNIT=ILUSEG,NML=NAM_2D_FRC)
!
IF (LUV_FLX .OR. LTH_FLX) WRITE(UNIT=ILUSEG,NML=NAM_LATZ_EDFLX)
!
IF (CPROGRAM/='MESONH') THEN
  LLG  = .FALSE.
END IF
WRITE(UNIT=ILUSEG,NML=NAM_CONF)
WRITE(UNIT=ILUSEG,NML=NAM_DYN)
WRITE(UNIT=ILUSEG,NML=NAM_NESTING)
IF(CBUTYPE /= 'NONE') THEN
  IF(CBUTYPE=='SKIP') CBUTYPE='CART'
  WRITE(UNIT=ILUSEG,NML=NAM_BUDGET)
END IF
IF(LBU_RU) WRITE(UNIT=ILUSEG,NML=NAM_BU_RU)
IF(LBU_RV) WRITE(UNIT=ILUSEG,NML=NAM_BU_RV)
IF(LBU_RW) WRITE(UNIT=ILUSEG,NML=NAM_BU_RW)
IF(LBU_RTH) WRITE(UNIT=ILUSEG,NML=NAM_BU_RTH)
IF(LBU_RTKE) WRITE(UNIT=ILUSEG,NML=NAM_BU_RTKE)
IF(LBU_RRV) WRITE(UNIT=ILUSEG,NML=NAM_BU_RRV)
IF(LBU_RRC) WRITE(UNIT=ILUSEG,NML=NAM_BU_RRC)
IF(LBU_RRR) WRITE(UNIT=ILUSEG,NML=NAM_BU_RRR)
IF(LBU_RRI) WRITE(UNIT=ILUSEG,NML=NAM_BU_RRI)
IF(LBU_RRS) WRITE(UNIT=ILUSEG,NML=NAM_BU_RRS)
IF(LBU_RRG) WRITE(UNIT=ILUSEG,NML=NAM_BU_RRG)
IF(LBU_RRH) WRITE(UNIT=ILUSEG,NML=NAM_BU_RRH)
IF(LBU_RSV) WRITE(UNIT=ILUSEG,NML=NAM_BU_RSV)
IF(LLES_MEAN .OR. LLES_RESOLVED .OR. LLES_SUBGRID .OR. LLES_UPDRAFT  &
.OR. LLES_DOWNDRAFT .OR. LLES_SPECTRA) WRITE(UNIT=ILUSEG,NML=NAM_LES)
IF(LFORCING .OR. LTRANS) WRITE(UNIT=ILUSEG,NML=NAM_FRC)
IF(CCLOUD(1:3) == 'ICE') CALL PARAM_ICEN_INIT(CPROGRAM, TPDATAFILE, .FALSE., ILUSEG, .FALSE., .FALSE., .FALSE., 1)
IF(CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' .OR. CCLOUD == 'KHKO') &
                     WRITE(UNIT=ILUSEG,NML=NAM_PARAM_C2R2)
IF(CCLOUD == 'C3R5' ) WRITE(UNIT=ILUSEG,NML=NAM_PARAM_C1R3) 
IF(CCLOUD == 'LIMA' ) CALL PARAM_LIMA_INIT(CPROGRAM, TPDATAFILE, .FALSE., ILUSEG, .FALSE., .FALSE., .FALSE., 1)
IF(CELEC /= 'NONE') WRITE(UNIT=ILUSEG,NML=NAM_ELEC) 
IF(LSERIES) WRITE(UNIT=ILUSEG,NML=NAM_SERIES)
IF(CTURB /= 'NONE') CALL TURBN_INIT(CPROGRAM, TPDATAFILE, .FALSE., ILUSEG, .FALSE., .FALSE., .FALSE., 1)
CALL NEBN_INIT(CPROGRAM, TPDATAFILE, .FALSE., ILUSEG, .FALSE., .FALSE., .FALSE., 1)
!Not possible (for the moment): arrays have been deallocated after ini_aircraft: WRITE(UNIT=ILUSEG,NML=NAM_AIRCRAFTS)
!Not possible (for the moment): arrays have been deallocated after ini_balloon:  WRITE(UNIT=ILUSEG,NML=NAM_BALLOONS)
!
!
!
!-------------------------------------------------------------------------------
!
!*       2.    WRITE UPDATED DESFM ON OUTPUT LISTING
!              -------------------------------------
!
IF (NVERB >= 5) THEN
!
!
  WRITE(UNIT=ILUOUT,FMT="(/,'DESCRIPTOR OF SEGMENT FOR MODEL ',I2)") KMI
  WRITE(UNIT=ILUOUT,FMT="(  '------------------------------- '   )")
!
  WRITE(UNIT=ILUOUT,FMT="('********** LOGICAL UNITSn **********')")
  WRITE(UNIT=ILUOUT,NML=NAM_LUNITn)
!  
  WRITE(UNIT=ILUOUT,FMT="('********** CONFIGURATIONn **********')")
  WRITE(UNIT=ILUOUT,NML=NAM_CONFn)
!  
!  
  WRITE(UNIT=ILUOUT,FMT="('********** DYNAMICn ****************')")
  WRITE(UNIT=ILUOUT,NML=NAM_DYNn)
!  
  WRITE(UNIT=ILUOUT,FMT="('********** ADVECTIONn **************')")
  WRITE(UNIT=ILUOUT,NML=NAM_ADVn)
  !  
  IF (LIBM_LSF) THEN
    WRITE(UNIT=ILUOUT,FMT="('********** IBM_PARAMn **************')")                           
    WRITE(UNIT=ILUOUT,NML=NAM_IBM_PARAMn)
  ENDIF
  !
  IF (LRECYCL) THEN
    WRITE(UNIT=ILUOUT,FMT="('********** RECYCL_PARAMn **************')")
    WRITE(UNIT=ILUOUT,NML=NAM_RECYCL_PARAMn)
  ENDIF
  !  
  WRITE(UNIT=ILUOUT,FMT="('********** PARAMETERIZATIONSn ******')")
  WRITE(UNIT=ILUOUT,NML=NAM_PARAMn)
!  
  WRITE(UNIT=ILUOUT,FMT="('********** RADIATIONn **************')")
  WRITE(UNIT=ILUOUT,NML=NAM_PARAM_RADn)
#ifdef MNH_ECRAD
  WRITE(UNIT=ILUOUT,FMT="('********** ECRADn **************')")
  WRITE(UNIT=ILUOUT,NML=NAM_PARAM_ECRADn)
#endif
!  
  WRITE(UNIT=ILUOUT,FMT="('********** CONVECTIONn *************')")
  WRITE(UNIT=ILUOUT,NML=NAM_PARAM_KAFRn)
!  
  WRITE(UNIT=ILUOUT,FMT="('************ PARAM_MFSHALLn  *******')")
  CALL PARAM_MFSHALLN_INIT(CPROGRAM, TPDATAFILE, .FALSE., ILUOUT, .FALSE., .FALSE., .FALSE., 2)
!
  WRITE(UNIT=ILUOUT,FMT="('********** LBCn ********************')")
  WRITE(UNIT=ILUOUT,NML=NAM_LBCn)
!
  WRITE(UNIT=ILUOUT,FMT="('********** NUDGINGn*****************')")  
  WRITE(UNIT=ILUOUT,NML=NAM_NUDGINGn)
!  
  WRITE(UNIT=ILUOUT,FMT="('********** TURBn *******************')")  
  CALL TURBN_INIT(CPROGRAM, TPDATAFILE, .FALSE., ILUOUT, .FALSE., .FALSE., .FALSE., 2)
!  
  WRITE(UNIT=ILUOUT,FMT="('********** NEBn *******************')")  
  CALL NEBN_INIT(CPROGRAM, TPDATAFILE, .FALSE., ILUOUT, .FALSE., .FALSE., .FALSE., 2)
!  
  WRITE(UNIT=ILUOUT,FMT="('********** CHEMICAL MONITORn *******')")  
  WRITE(UNIT=ILUOUT,NML=NAM_CH_MNHCn)
!
  WRITE(UNIT=ILUOUT,FMT="('************ CHEMICAL SOLVERn ******************')")
  WRITE(UNIT=ILUOUT,NML=NAM_CH_SOLVERn)
!
  WRITE(UNIT=ILUOUT,FMT="('************ TEMPORAL SERIESn ******************')")
  WRITE(UNIT=ILUOUT,NML=NAM_SERIESn)
!  
  WRITE(UNIT=ILUOUT,FMT="('********** BLOWING SNOW SCHEME ****************')")
  WRITE(UNIT=ILUOUT,NML=NAM_BLOWSNOWn)
!
  WRITE(UNIT=ILUOUT,FMT="('********** BLAZE *******************')")
  WRITE(UNIT=ILUOUT,NML=NAM_FIREn)
!
  WRITE(UNIT=ILUOUT,FMT="('********** BLANKn *****************************')")
  WRITE(UNIT=ILUOUT,NML=NAM_BLANKn)
  WRITE(UNIT=ILUOUT,FMT="('************ ICE SCHEME ***********************')")
  CALL PARAM_ICEN_INIT(CPROGRAM, TPDATAFILE, .FALSE., ILUOUT, .FALSE., .FALSE., .FALSE., 2)
!    
  IF (KMI==1) THEN
    WRITE(UNIT=ILUOUT,FMT="(/,'PART OF SEGMENT FILE COMMON TO ALL THE MODELS')")
    WRITE(UNIT=ILUOUT,FMT="(  '---------------------------------------------')")
!
    WRITE(UNIT=ILUOUT,FMT="('************ CONFIGURATION ********************')")
    WRITE(UNIT=ILUOUT,NML=NAM_CONF)
!    
    WRITE(UNIT=ILUOUT,FMT="('************ DYNAMIC **************************')")
    WRITE(UNIT=ILUOUT,NML=NAM_DYN)
!
    WRITE(UNIT=ILUOUT,FMT="(/,'********** NESTING **************************')")
    WRITE(UNIT=ILUOUT,NML=NAM_NESTING)
!
!    WRITE(UNIT=ILUOUT,FMT="(/,'********** BACKUP ***************************')")
!    WRITE(UNIT=ILUOUT,NML=NAM_BACKUP)
!
!    WRITE(UNIT=ILUOUT,FMT="(/,'********** OUTPUT ***************************')")
!    WRITE(UNIT=ILUOUT,NML=NAM_OUTPUT)
    WRITE(UNIT=ILUOUT,FMT="('************ BUDGET ***************************')")
    WRITE(UNIT=ILUOUT,NML=NAM_BUDGET)
!    
    IF ( .NOT. ALLOCATED( CBULIST_RU ) ) ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RU(0) )
    WRITE(UNIT=ILUOUT,FMT="('************ U BUDGET *************************')")
    WRITE(UNIT=ILUOUT,NML=NAM_BU_RU)
!
    IF ( .NOT. ALLOCATED( CBULIST_RV ) ) ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RV(0) )
    WRITE(UNIT=ILUOUT,FMT="('************ V BUDGET *************************')")
    WRITE(UNIT=ILUOUT,NML=NAM_BU_RV)
!    
    IF ( .NOT. ALLOCATED( CBULIST_RW ) ) ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RW(0) )
    WRITE(UNIT=ILUOUT,FMT="('************ W BUDGET *************************')")
    WRITE(UNIT=ILUOUT,NML=NAM_BU_RW)
!    
    IF ( .NOT. ALLOCATED( CBULIST_RTH ) ) ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RTH(0) )
    WRITE(UNIT=ILUOUT,FMT="('************ TH BUDGET ************************')")
    WRITE(UNIT=ILUOUT,NML=NAM_BU_RTH)
!    
    IF ( .NOT. ALLOCATED( CBULIST_RTKE ) ) ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RTKE(0) )
    WRITE(UNIT=ILUOUT,FMT="('************ TKE BUDGET ***********************')")
    WRITE(UNIT=ILUOUT,NML=NAM_BU_RTKE)
!    
    IF ( .NOT. ALLOCATED( CBULIST_RRV ) ) ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRV(0) )
    WRITE(UNIT=ILUOUT,FMT="('************ RV BUDGET ************************')")
    WRITE(UNIT=ILUOUT,NML=NAM_BU_RRV)
!    
    IF ( .NOT. ALLOCATED( CBULIST_RRC ) ) ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRC(0) )
    WRITE(UNIT=ILUOUT,FMT="('************ RC BUDGET ************************')")
    WRITE(UNIT=ILUOUT,NML=NAM_BU_RRC)
!    
    IF ( .NOT. ALLOCATED( CBULIST_RRR ) ) ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRR(0) )
    WRITE(UNIT=ILUOUT,FMT="('************ RR BUDGET ************************')")
    WRITE(UNIT=ILUOUT,NML=NAM_BU_RRR)
!    
    IF ( .NOT. ALLOCATED( CBULIST_RRI ) ) ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRI(0) )
    WRITE(UNIT=ILUOUT,FMT="('************ RI BUDGET ************************')")
    WRITE(UNIT=ILUOUT,NML=NAM_BU_RRI)
!    
    IF ( .NOT. ALLOCATED( CBULIST_RRS ) ) ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRS(0) )
    WRITE(UNIT=ILUOUT,FMT="('************ RS BUDGET ************************')")
    WRITE(UNIT=ILUOUT,NML=NAM_BU_RRS)
!    
    IF ( .NOT. ALLOCATED( CBULIST_RRG ) ) ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRG(0) )
    WRITE(UNIT=ILUOUT,FMT="('************ RG BUDGET ************************')")
    WRITE(UNIT=ILUOUT,NML=NAM_BU_RRG)
!    
    IF ( .NOT. ALLOCATED( CBULIST_RRH ) ) ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRH(0) )
    WRITE(UNIT=ILUOUT,FMT="('************ RH BUDGET ************************')")
    WRITE(UNIT=ILUOUT,NML=NAM_BU_RRH)
!
    IF ( .NOT. ALLOCATED( CBULIST_RSV ) ) ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RSV(0) )
    WRITE(UNIT=ILUOUT,FMT="('************ SVx BUDGET ***********************')")
    WRITE(UNIT=ILUOUT,NML=NAM_BU_RSV)
!    
    WRITE(UNIT=ILUOUT,FMT="('************ LES ******************************')")
    WRITE(UNIT=ILUOUT,NML=NAM_LES)
!    
    WRITE(UNIT=ILUOUT,FMT="('************ FORCING **************************')")
    WRITE(UNIT=ILUOUT,NML=NAM_FRC)
!    
    WRITE(UNIT=ILUOUT,FMT="('********** DUST SCHEME ************************')")
    WRITE(UNIT=ILUOUT,NML=NAM_DUST)
!
    WRITE(UNIT=ILUOUT,FMT="('********** PASPOL *****************************')")
    WRITE(UNIT=ILUOUT,NML=NAM_PASPOL)
!
#ifdef MNH_FOREFIRE
    WRITE(UNIT=ILUOUT,FMT="('********** FOREFIRE *****************************')")
    WRITE(UNIT=ILUOUT,NML=NAM_FOREFIRE)
!
#endif
    WRITE(UNIT=ILUOUT,FMT="('********** CONDSAMP****************************')")
    WRITE(UNIT=ILUOUT,NML=NAM_CONDSAMP)
!
    WRITE(UNIT=ILUOUT,FMT="('********** SALT SCHEME ************************')")
    WRITE(UNIT=ILUOUT,NML=NAM_SALT)
!
    WRITE(UNIT=ILUOUT,FMT="('********** BLOWING SNOW SCHEME ****************')")
    WRITE(UNIT=ILUOUT,NML=NAM_BLOWSNOW)    
!
    WRITE(UNIT=ILUOUT,FMT="('************ ORILAM SCHEME ********************')")
    WRITE(UNIT=ILUOUT,NML=NAM_CH_ORILAM)
!    
    IF( CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5') THEN
      WRITE(UNIT=ILUOUT,FMT="('*********** C2R2 SCHEME *********************')")
      WRITE(UNIT=ILUOUT,NML=NAM_PARAM_C2R2)
      IF( CCLOUD == 'C3R5' ) THEN
        WRITE(UNIT=ILUOUT,FMT="('*********** C1R3 SCHEME *********************')")
        WRITE(UNIT=ILUOUT,NML=NAM_PARAM_C1R3)
      END IF
    END IF
!
Gaelle TANGUY's avatar
Gaelle TANGUY committed
    IF( CCLOUD == 'LIMA' ) THEN
      WRITE(UNIT=ILUOUT,FMT="('*********** LIMA SCHEME *********************')")
      CALL PARAM_LIMA_INIT(CPROGRAM, TPDATAFILE, .FALSE., ILUOUT, .FALSE., .FALSE., .FALSE., 2)
Gaelle TANGUY's avatar
Gaelle TANGUY committed
    END IF
!
    IF( CCLOUD == 'KHKO' ) THEN
      WRITE(UNIT=ILUOUT,FMT="('*********** KHKO SCHEME *********************')")
      WRITE(UNIT=ILUOUT,NML=NAM_PARAM_C2R2)
    END IF
!
    IF( CELEC /= 'NONE' ) THEN
      WRITE(UNIT=ILUOUT,FMT="('*********** ELEC SCHEME *********************')")
      WRITE(UNIT=ILUOUT,NML=NAM_ELEC)
    END IF
!
    WRITE(UNIT=ILUOUT,FMT="('************ TEMPORAL SERIES ****************')")
    WRITE(UNIT=ILUOUT,NML=NAM_SERIES)
!
  END IF
!
END IF  
!
IF (CPROGRAM /='MESONH') THEN !return to previous LHORELAX_
  LHORELAX_UVWTH = GHORELAX_UVWTH
  LHORELAX_RV    = GHORELAX_RV
  LHORELAX_RC    = GHORELAX_RC
  LHORELAX_RR    = GHORELAX_RR
  LHORELAX_RI    = GHORELAX_RI
  LHORELAX_RS    = GHORELAX_RS
  LHORELAX_RG    = GHORELAX_RG
  LHORELAX_TKE   = GHORELAX_TKE
  LHORELAX_SV(:) = GHORELAX_SV(:)
  LHORELAX_SVC2R2= GHORELAX_SVC2R2
  LHORELAX_SVC1R3= GHORELAX_SVC1R3
Gaelle TANGUY's avatar
Gaelle TANGUY committed
  LHORELAX_SVLIMA= GHORELAX_SVLIMA
  LHORELAX_SVELEC= GHORELAX_SVELEC
  LHORELAX_SVCHEM= GHORELAX_SVCHEM
  LHORELAX_SVCHIC= GHORELAX_SVCHIC
  LHORELAX_SVLG  = .FALSE.
  LHORELAX_SVDST = GHORELAX_SVDST
  LHORELAX_SVSLT = GHORELAX_SVSLT
  LHORELAX_SVPP  = GHORELAX_SVPP 
  LHORELAX_SVFIRE  = GHORELAX_SVFIRE
#ifdef MNH_FOREFIRE
  LHORELAX_SVFF  = GHORELAX_SVFF
#endif
  LHORELAX_SVCS  = GHORELAX_SVCS 
  LHORELAX_SVAER = GHORELAX_SVAER
  LHORELAX_SVSNW = GHORELAX_SVSNW  
ELSE
  LHORELAX_SV(:) = GHORELAX_SV(:)
ENDIF
CALL UPDATE_NAM_DYNn
!------------------------------------------------------------------------------
!
END SUBROUTINE WRITE_DESFM_n