SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/read_isba_confn.F90
Go to the documentation of this file.
00001 !     #########
00002       SUBROUTINE READ_ISBA_CONF_n(HPROGRAM)
00003 !     #######################################################
00004 !
00005 !!****  *READ_ISBA_CONF* - routine to read the configuration for ISBA
00006 !!
00007 !!    PURPOSE
00008 !!    -------
00009 !!
00010 !!**  METHOD
00011 !!    ------
00012 !!
00013 !!    EXTERNAL
00014 !!    --------
00015 !!
00016 !!
00017 !!    IMPLICIT ARGUMENTS
00018 !!    ------------------
00019 !!
00020 !!    REFERENCE
00021 !!    ---------
00022 !!
00023 !!
00024 !!    AUTHOR
00025 !!    ------
00026 !!      V. Masson   *Meteo France*      
00027 !!
00028 !!    MODIFICATIONS
00029 !!    -------------
00030 !!      Original    01/2003 
00031 !!      P Le Moigne 09/2005 AGS modifs of L. Jarlan
00032 !!      P Le Moigne 09/2005 CSNOWRES option
00033 !!      Modified by P. Le Moigne (06/2006): seeding and irrigation
00034 !!      Modified by P. Le Moigne (05/2008): deep soil characteristics
00035 !!      Modified by R. El Khatib 05-Apr-2012 Fix message handling
00036 !-------------------------------------------------------------------------------
00037 !
00038 !*       0.    DECLARATIONS
00039 !              ------------
00040 !
00041 USE MODE_MODELN_SURFEX_HANDLER
00042 !
00043 USE MODE_POS_SURF
00044 !
00045 USE MODI_TEST_NAM_VAR_SURF
00046 USE MODI_GET_LUOUT
00047 USE MODI_OPEN_NAMELIST
00048 USE MODI_CLOSE_NAMELIST
00049 !
00050 USE MODN_ISBA_n
00051 !
00052 USE MODD_READ_NAMELIST, ONLY : LNAM_READ
00053 USE MODD_SURF_PAR,   ONLY : XUNDEF
00054 !
00055 !
00056 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00057 USE PARKIND1  ,ONLY : JPRB
00058 !
00059 USE MODI_GET_SURF_ATM_SSO_ROUGH
00060 IMPLICIT NONE
00061 !
00062 !*       0.1   Declarations of arguments
00063 !              -------------------------
00064 !
00065  CHARACTER(LEN=6),  INTENT(IN)  :: HPROGRAM ! program calling ISBA
00066 
00067 !
00068 !*       0.2   Declarations of local variables
00069 !              -------------------------------
00070 !
00071 !
00072 LOGICAL           :: GFOUND         ! Return code when searching namelist
00073 INTEGER           :: ILUOUT         ! logical unit of output file
00074 INTEGER           :: INAM           ! logical unit of namelist file
00075  CHARACTER(LEN=4)  :: YROUGH         ! CROUGH from surf_atm
00076 INTEGER           :: IMI
00077 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00078 !-------------------------------------------------------------------------------
00079 !
00080 !* get output listing file logical unit
00081 !
00082 IF (LHOOK) CALL DR_HOOK('READ_ISBA_CONF_N',0,ZHOOK_HANDLE)
00083  CALL GET_LUOUT(HPROGRAM,ILUOUT)
00084 !
00085 IMI=GET_CURRENT_MODEL_INDEX_SURFEX()
00086 !
00087 IF (IMI.NE.-1 .AND. LNAM_READ) THEN
00088  CALL INIT_NAM_ISBAn
00089  CALL INIT_NAM_SGH_ISBAn
00090  CALL INIT_NAM_DIAG_ISBAn
00091  CALL INIT_NAM_DIAG_SURFn
00092  CALL INIT_NAM_CH_CONTROLn
00093  CALL INIT_NAM_CH_ISBAn
00094  CALL INIT_NAM_SPINUP_CARB_ISBAn
00095  CALL INIT_NAM_CROCUSn 
00096 ENDIF
00097 !
00098 IF (LNAM_READ) THEN
00099  !
00100  !* open namelist file
00101  !
00102  CALL OPEN_NAMELIST(HPROGRAM,INAM)
00103  !
00104  !* reading of namelist
00105  !  -------------------
00106  !
00107  CALL POSNAM(INAM,'NAM_ISBAN',GFOUND,ILUOUT)
00108  IF (GFOUND) READ(UNIT=INAM,NML=NAM_ISBAn)
00109  CALL POSNAM(INAM,'NAM_SGH_ISBAN',GFOUND,ILUOUT)
00110  IF (GFOUND) READ(UNIT=INAM,NML=NAM_SGH_ISBAn)
00111  CALL POSNAM(INAM,'NAM_DIAG_SURFN',GFOUND,ILUOUT)
00112  IF (GFOUND) READ(UNIT=INAM,NML=NAM_DIAG_SURFn)
00113  CALL POSNAM(INAM,'NAM_DIAG_ISBAN',GFOUND,ILUOUT)
00114  IF (GFOUND) READ(UNIT=INAM,NML=NAM_DIAG_ISBAn)
00115  CALL POSNAM(INAM,'NAM_CH_CONTROLN',GFOUND,ILUOUT)
00116  IF (GFOUND) READ(UNIT=INAM,NML=NAM_CH_CONTROLn)
00117  CALL POSNAM(INAM,'NAM_CH_ISBAN',GFOUND,ILUOUT)
00118  IF (GFOUND) READ(UNIT=INAM,NML=NAM_CH_ISBAn)
00119   CALL POSNAM(INAM,'NAM_SPINUP_CARBN',GFOUND,ILUOUT)
00120  IF (GFOUND) READ(UNIT=INAM,NML=NAM_SPINUP_CARBn)
00121  CALL POSNAM(INAM,'NAM_CROCUSN',GFOUND,ILUOUT)
00122  IF (GFOUND) READ(UNIT=INAM,NML=NAM_CROCUSn) 
00123  !
00124  CALL TEST_NAM_VAR_SURF(ILUOUT,'CROUGH',CROUGH,'NONE','Z01D','Z04D','BE04','UNDE')
00125  CALL TEST_NAM_VAR_SURF(ILUOUT,'CSCOND',CSCOND,'NP89','PL98')
00126  CALL TEST_NAM_VAR_SURF(ILUOUT,'CALBEDO',CALBEDO,'EVOL','DRY ','WET ','MEAN','USER','CM13')
00127  CALL TEST_NAM_VAR_SURF(ILUOUT,'CC1DRY',CC1DRY,'DEF ','GB93')
00128  CALL TEST_NAM_VAR_SURF(ILUOUT,'CSOILFRZ',CSOILFRZ,'DEF','LWT')
00129  CALL TEST_NAM_VAR_SURF(ILUOUT,'CDIFSFCOND',CDIFSFCOND,'DEF ','MLCH')
00130  CALL TEST_NAM_VAR_SURF(ILUOUT,'CSNOWRES',CSNOWRES,'DEF','RIL')
00131  CALL TEST_NAM_VAR_SURF(ILUOUT,'CCPSURF',CCPSURF,'DRY','HUM')
00132  !
00133  CALL TEST_NAM_VAR_SURF(ILUOUT,'CRUNOFF',CRUNOFF,'WSAT','DT92','SGH ','TOPD')
00134  CALL TEST_NAM_VAR_SURF(ILUOUT,'CTOPREG',CTOPREG,'DEF','NON')
00135  CALL TEST_NAM_VAR_SURF(ILUOUT,'CKSAT',CKSAT,'DEF','SGH','EXP')
00136  CALL TEST_NAM_VAR_SURF(ILUOUT,'CSOC',CSOC,'DEF','SGH')
00137  CALL TEST_NAM_VAR_SURF(ILUOUT,'CRAIN',CRAIN,'DEF','SGH')
00138  CALL TEST_NAM_VAR_SURF(ILUOUT,'CHORT',CHORT,'DEF','SGH')
00139  !
00140  CALL TEST_NAM_VAR_SURF(ILUOUT,'CCH_DRY_DEP',CCH_DRY_DEP,'      ','WES89 ','NONE  ')
00141  !
00142  !* close namelist file
00143  !
00144  CALL CLOSE_NAMELIST(HPROGRAM,INAM)
00145  !
00146 ENDIF
00147 !
00148 IF (IMI.NE.-1) THEN
00149  CALL UPDATE_NAM_ISBAn
00150  CALL UPDATE_NAM_SGH_ISBAn
00151  CALL UPDATE_NAM_DIAG_ISBAn
00152  CALL UPDATE_NAM_DIAG_SURFn
00153  CALL UPDATE_NAM_CH_CONTROLn
00154  CALL UPDATE_NAM_CH_ISBAn
00155  CALL UPDATE_NAM_SPINUP_CARB_ISBAn
00156  CALL UPDATE_NAM_CROCUSn 
00157 ENDIF
00158 !
00159 !-------------------------------------------------------------------------------
00160 !
00161 !* surface time-step forced by the atmosphere
00162 !
00163 !XTSTEP = XUNDEF
00164 !
00165 !-------------------------------------------------------------------------------
00166 !
00167 !* coherence check : orographic drag must be done only once
00168 !
00169  CALL GET_SURF_ATM_SSO_ROUGH(YROUGH)
00170 !
00171 IF (YROUGH/="NONE") THEN
00172   IF (LNAM_READ) THEN
00173     WRITE(ILUOUT,*) " -------------------------------------------------------------------------- "
00174     WRITE(ILUOUT,*) " Orographic roughness is done in SURF_ATM, so it should not be done in ISBA "
00175     WRITE(ILUOUT,*) " CROUGH in NAM_ISBAn is set to 'NONE' "
00176     WRITE(ILUOUT,*) " "
00177     WRITE(ILUOUT,*) " -------------------------------------------------------------------------- "
00178   ENDIF
00179   CROUGH = "NONE"
00180 END IF
00181 IF (LHOOK) CALL DR_HOOK('READ_ISBA_CONF_N',1,ZHOOK_HANDLE)
00182 !-------------------------------------------------------------------------------
00183 !
00184 END SUBROUTINE READ_ISBA_CONF_n