SURFEX v7.3
General documentation of Surfex
|
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