SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/read_prep_greenroof_snow.F90
Go to the documentation of this file.
00001 !     #########
00002       SUBROUTINE READ_PREP_GREENROOF_SNOW(HPROGRAM,HSNOW,KSNOW_LAYER,HFILE,HFILETYPE)
00003 !     #######################################################
00004 !
00005 !!****  *READ_PREP_GREENROOF_SNOW* - routine to read the configuration for snow
00006 !!                                   in ISBA fields preparation
00007 !!
00008 !!    PURPOSE
00009 !!    -------
00010 !!
00011 !!**  METHOD
00012 !!    ------
00013 !!
00014 !!    EXTERNAL
00015 !!    --------
00016 !!
00017 !!
00018 !!    IMPLICIT ARGUMENTS
00019 !!    ------------------
00020 !!
00021 !!    REFERENCE
00022 !!    ---------
00023 !!    Based on read_prep_garden_snow
00024 !!
00025 !!    AUTHOR
00026 !!    ------
00027 !!      C. de Munck   *Meteo France*    
00028 !!
00029 !!    MODIFICATIONS
00030 !!    -------------
00031 !!      Original    08/2011 
00032 !-------------------------------------------------------------------------------
00033 !
00034 !*       0.    DECLARATIONS
00035 !              ------------
00036 !
00037 USE MODN_PREP_GREENROOF_SNOW
00038 USE MODD_READ_NAMELIST,        ONLY : LNAM_READ
00039 !
00040 USE MODD_SURF_PAR,             ONLY : XUNDEF
00041 USE MODD_SNOW_PAR,             ONLY : XANSMIN, XRHOSMAX
00042 USE MODD_CSTS,                 ONLY : XTT
00043 !
00044 USE MODE_POS_SURF
00045 USE MODI_TEST_NAM_VAR_SURF
00046 USE MODI_GET_LUOUT
00047 USE MODI_OPEN_NAMELIST
00048 USE MODI_CLOSE_NAMELIST
00049 USE MODI_ABOR1_SFX
00050 !
00051 USE MODD_PREP_TEB_GREENROOF,   ONLY : CFILE_SNOW, CTYPE_SNOW, LSNOW_IDEAL, &
00052                                       XWSNOW, XTSNOW, XRSNOW, XASNOW 
00053 !
00054 USE MODD_PREP_SNOW,            ONLY : LSNOW_FRAC_TOT, NSNOW_LAYER_MAX
00055 !
00056 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00057 USE PARKIND1  ,ONLY : JPRB
00058 !
00059 IMPLICIT NONE
00060 !
00061 !*       0.1   Declarations of arguments
00062 !              -------------------------
00063 !
00064  CHARACTER(LEN=6),  INTENT(IN)  :: HPROGRAM ! program calling ISBA
00065  CHARACTER(LEN=3),  INTENT(OUT) :: HSNOW    ! snow scheme
00066 INTEGER, INTENT(OUT)           :: KSNOW_LAYER  ! number of snow layers
00067  CHARACTER(LEN=28), OPTIONAL, INTENT(OUT) :: HFILE        ! file name
00068  CHARACTER(LEN=6),  OPTIONAL, INTENT(OUT) :: HFILETYPE    ! file type
00069 !
00070 !*       0.2   Declarations of local variables
00071 !              -------------------------------
00072 !
00073 REAL, DIMENSION(NSNOW_LAYER_MAX) :: ZWSNOW, ZRSNOW, ZTSNOW, 
00074                                     ZSG1SNOW, ZSG2SNOW, ZHISTSNOW, ZAGESNOW
00075 !
00076 LOGICAL           :: GFOUND         ! Return code when searching namelist
00077 INTEGER           :: ILUOUT         ! output file logical unit
00078 INTEGER           :: ILUNAM         ! namelist file logical unit
00079 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00080 !-------------------------------------------------------------------------------
00081 NAMELIST/NAM_PREP_ISBA_SNOW/CSNOW, NSNOW_LAYER, CFILE_SNOW, CTYPE_SNOW,      &
00082                             LSNOW_IDEAL, LSNOW_FRAC_TOT,                     &
00083                             ZWSNOW, ZTSNOW, ZRSNOW, XASNOW,                  &
00084                             ZSG1SNOW, ZSG2SNOW, ZHISTSNOW, ZAGESNOW
00085 NAMELIST/NAM_PREP_GREENROOF_SNOW/CSNOW, NSNOW_LAYER, CFILE_SNOW, CTYPE_SNOW, &
00086                             LSNOW_IDEAL, ZWSNOW, ZTSNOW, ZRSNOW, XASNOW
00087 !-------------------------------------------------------------------------------
00088 IF (LHOOK) CALL DR_HOOK('READ_PREP_GREENROOF_SNOW',0,ZHOOK_HANDLE)
00089 !
00090 !* default for greenroofs
00091 !  ----------------------
00092 CSNOW       = '3-L'
00093 NSNOW_LAYER = 3
00094 !
00095 IF (LNAM_READ) THEN
00096   !
00097   CSNOW          = '3-L'
00098   NSNOW_LAYER    = 3
00099   !
00100   CFILE_SNOW     = '                         '
00101   CTYPE_SNOW     = '      '  
00102   !
00103   LSNOW_IDEAL    = .FALSE.
00104   LSNOW_FRAC_TOT = .FALSE.
00105   !
00106   ZWSNOW(:)      = 0.
00107   ZRSNOW(:)      = XRHOSMAX
00108   ZTSNOW(:)      = XTT
00109   XASNOW         = XANSMIN  
00110   ZSG1SNOW(:)    = XUNDEF
00111   ZSG2SNOW(:)    = XUNDEF
00112   ZHISTSNOW(:)   = XUNDEF
00113   ZAGESNOW(:)    = XUNDEF  
00114   !
00115   CALL GET_LUOUT(HPROGRAM,ILUOUT)
00116   CALL OPEN_NAMELIST(HPROGRAM,ILUNAM)
00117   !
00118   !* reading of namelist
00119   !  -------------------
00120   !
00121   !* default can be provided by ISBA scheme variables
00122   CALL POSNAM(ILUNAM,'NAM_PREP_ISBA_SNOW',GFOUND,ILUOUT)
00123   IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_PREP_ISBA_SNOW)
00124   !
00125   CALL TEST_NAM_VAR_SURF(ILUOUT,'CSNOW',CSNOW,'D95','3-L','EBA','CRO','NON')
00126   !
00127   !* It is erased by GREENROOF namelist if specified
00128   CALL POSNAM(ILUNAM,'NAM_PREP_GREENROOF_SNOW',GFOUND,ILUOUT)
00129   IF (GFOUND) THEN 
00130     READ(UNIT=ILUNAM,NML=NAM_PREP_GREENROOF_SNOW)
00131   !crocus can't be used in garden if not used in isba scheme
00132     CALL TEST_NAM_VAR_SURF(ILUOUT,'CSNOW',CSNOW,'D95','3-L','EBA','NON')
00133   ENDIF
00134   !
00135   IF ( CSNOW=='NON')                                         NSNOW_LAYER = 0
00136   IF ( CSNOW=='D95' .OR. CSNOW=='EBA')                       NSNOW_LAYER = 1
00137   IF ((CSNOW=='3-L' .OR. CSNOW=='CRO') .AND. NSNOW_LAYER<=2) NSNOW_LAYER = 3
00138   !
00139   IF (CSNOW=='3-L' .AND. NSNOW_LAYER>3) THEN
00140     NSNOW_LAYER = 3
00141     WRITE(ILUOUT,*) '------------------------------------'
00142     WRITE(ILUOUT,*) 'With ISBA-ES, number of snow layers '
00143     WRITE(ILUOUT,*) 'cannot be more than 3.              '
00144     WRITE(ILUOUT,*) 'So it is forced to 3 here.          '
00145     WRITE(ILUOUT,*) '------------------------------------'
00146   ENDIF
00147   !  
00148   IF (NSNOW_LAYER > NSNOW_LAYER_MAX) THEN
00149     WRITE(ILUOUT,*) '------------------------------------'
00150     WRITE(ILUOUT,*) 'Please update modd_prep_snow.f90 routine : '
00151     WRITE(ILUOUT,*) 'The maximum number of snow layers  '
00152     WRITE(ILUOUT,*) 'in the declaration of the namelist variables '
00153     WRITE(ILUOUT,*) 'must be decreased to : ', NSNOW_LAYER_MAX
00154     WRITE(ILUOUT,*) '------------------------------------'
00155     CALL ABOR1_SFX('READ_PREP_GREENROOF_SNOW: NUMBER OF SNOW LAYERS MUST BE INCREASED IN NAMELIST DECLARATION')
00156   ENDIF
00157   !
00158   ALLOCATE(XWSNOW(NSNOW_LAYER))
00159   ALLOCATE(XRSNOW(NSNOW_LAYER))
00160   ALLOCATE(XTSNOW(NSNOW_LAYER))
00161   !
00162   XWSNOW=ZWSNOW(1:NSNOW_LAYER)
00163   XRSNOW=ZRSNOW(1:NSNOW_LAYER)
00164   XTSNOW=ZTSNOW(1:NSNOW_LAYER)
00165   !
00166   CALL CLOSE_NAMELIST(HPROGRAM,ILUNAM)
00167   !
00168 ENDIF
00169 !
00170 HSNOW       = CSNOW
00171 KSNOW_LAYER = NSNOW_LAYER
00172 !
00173 ! A FAIRE :
00174 !mod03/08: pbme with 3rd line to solve / not sure needed for greenroofs anyway
00175 !IF (LEN_TRIM(CFILE_SNOW)>0 .AND. LEN_TRIM(CTYPE_SNOW)>0 ) THEN
00176 !  IF (PRESENT(HFILE)) HFILE = CFILE_SNOW
00177 !  IF (PRESENT(HFILETYPE)) HFILETYPE = CTYPE_SNOW
00178 !END IF
00179 !
00180 IF (LHOOK) CALL DR_HOOK('READ_PREP_GREENROOF_SNOW',1,ZHOOK_HANDLE)
00181 !
00182 !-------------------------------------------------------------------------------
00183 !-------------------------------------------------------------------------------
00184 !
00185 END SUBROUTINE READ_PREP_GREENROOF_SNOW