SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE PREP_TEB_GRIB(HPROGRAM,HSURF,HFILE,KLUOUT,PFIELD) 00003 ! ################################################################################# 00004 ! 00005 !!**** *PREP_TEB_GRIB* - prepares TEB field from operational GRIB 00006 !! 00007 !! PURPOSE 00008 !! ------- 00009 ! 00010 !!** METHOD 00011 !! ------ 00012 !! 00013 !! REFERENCE 00014 !! --------- 00015 !! 00016 !! 00017 !! AUTHOR 00018 !! ------ 00019 !! V. Masson 00020 !! 00021 !! MODIFICATIONS 00022 !! ------------- 00023 !! Original 01/2004 00024 !!------------------------------------------------------------------ 00025 ! 00026 00027 ! 00028 USE MODD_TYPE_DATE_SURF 00029 ! 00030 USE MODI_PREP_GRIB_GRID 00031 USE MODE_READ_GRIB 00032 USE MODI_INTERP_GRID 00033 ! 00034 USE MODD_PREP, ONLY : CINGRID_TYPE, CINTERP_TYPE 00035 USE MODD_GRID_GRIB, ONLY : CGRIB_FILE, NNI 00036 USE MODD_PREP_TEB, ONLY : XGRID_ROAD, XGRID_WALL, XGRID_ROOF, XGRID_FLOOR, & 00037 XTI_BLD, XTI_ROAD, XHUI_BLD, XTI_BLD_DEF, & 00038 XHUI_BLD_DEF 00039 USE MODD_SURF_PAR, ONLY : XUNDEF 00040 ! 00041 ! 00042 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00043 USE PARKIND1 ,ONLY : JPRB 00044 ! 00045 IMPLICIT NONE 00046 ! 00047 !* 0.1 declarations of arguments 00048 ! 00049 CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes 00050 CHARACTER(LEN=7), INTENT(IN) :: HSURF ! type of field 00051 CHARACTER(LEN=28), INTENT(IN) :: HFILE ! name of file 00052 INTEGER, INTENT(IN) :: KLUOUT ! logical unit of output listing 00053 REAL,DIMENSION(:,:), POINTER :: PFIELD ! field to interpolate horizontally 00054 ! 00055 !* 0.2 declarations of local variables 00056 ! 00057 TYPE (DATE_TIME) :: TZTIME_GRIB ! current date and time 00058 CHARACTER(LEN=6) :: YINMODEL ! model from which GRIB file originates 00059 REAL, DIMENSION(:) , POINTER :: ZMASK => NULL() ! Land mask 00060 REAL, DIMENSION(:), POINTER :: ZFIELD1D => NULL() ! 1D field read 00061 REAL, DIMENSION(:,:), POINTER :: ZFIELD => NULL() ! field read 00062 REAL, DIMENSION(:,:), POINTER :: ZD => NULL() ! depth of field in the soil 00063 REAL :: ZTI_BLD !indoor air temperature 00064 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00065 ! 00066 !------------------------------------------------------------------------------------- 00067 ! 00068 !* 1. Reading of grid 00069 ! --------------- 00070 ! 00071 IF (LHOOK) CALL DR_HOOK('PREP_TEB_GRIB',0,ZHOOK_HANDLE) 00072 ! 00073 IF (TRIM(HFILE).NE.CGRIB_FILE) CGRIB_FILE="" 00074 ! 00075 CALL PREP_GRIB_GRID(HFILE,KLUOUT,YINMODEL,CINGRID_TYPE,TZTIME_GRIB) 00076 ! 00077 CALL READ_GRIB_LAND_MASK(HFILE,KLUOUT,YINMODEL,ZMASK) 00078 ! 00079 IF (HSURF=='T_FLOOR' .OR. HSURF=='T_WALL' .OR. HSURF=='T_ROOF' .OR. HSURF=='T_WIN2' .OR. HSURF=='TI_BLD' .OR. HSURF=='T_MASS') THEN 00080 ZTI_BLD = XTI_BLD_DEF 00081 IF (XTI_BLD/=XUNDEF) ZTI_BLD=XTI_BLD 00082 ENDIF 00083 ! 00084 !--------------------------------------------------------------------------------------- 00085 SELECT CASE(HSURF) 00086 !--------------------------------------------------------------------------------------- 00087 ! 00088 !* 2. Orography 00089 ! --------- 00090 ! 00091 CASE('ZS ') 00092 SELECT CASE (YINMODEL) 00093 CASE ('ECMWF ','ARPEGE','ALADIN','MOCAGE') 00094 CALL READ_GRIB_ZS_LAND(HFILE,KLUOUT,YINMODEL,ZMASK,ZFIELD1D) 00095 ALLOCATE(PFIELD(SIZE(ZFIELD1D),1)) 00096 PFIELD(:,1) = ZFIELD1D(:) 00097 DEALLOCATE(ZFIELD1D) 00098 END SELECT 00099 ! 00100 !* 3. Profile of temperatures in roads 00101 ! -------------------------------- 00102 ! 00103 CASE('T_ROAD') 00104 !* reading of the profile and its depth definition 00105 SELECT CASE(YINMODEL) 00106 CASE('ECMWF ') 00107 CALL READ_GRIB_TG_ECMWF(HFILE,KLUOUT,YINMODEL,ZMASK,ZFIELD,ZD) 00108 CASE('ARPEGE','ALADIN','MOCAGE') 00109 CALL READ_GRIB_TG_METEO_FRANCE(HFILE,KLUOUT,YINMODEL,ZMASK,ZFIELD,ZD) 00110 END SELECT 00111 !* if deep road temperature is prescribed 00112 IF (XTI_ROAD/=XUNDEF) THEN 00113 ZFIELD(:,2:) = XTI_ROAD 00114 END IF 00115 CALL TEB_PROFILE_GRIB(XGRID_ROAD) 00116 ! 00117 !* 3.bis Profile of temperatures in floors 00118 ! -------------------------------- 00119 00120 CASE('T_FLOOR') 00121 !* reading of the profile and its depth definition 00122 SELECT CASE(YINMODEL) 00123 CASE('ECMWF ','ARPEGE','ALADIN','MOCAGE') 00124 CALL READ_GRIB_TF_TEB(HFILE,KLUOUT,YINMODEL,ZTI_BLD,ZMASK,ZFIELD,ZD) 00125 END SELECT 00126 !* if deep road temperature is prescribed 00127 IF (XTI_ROAD/=XUNDEF) THEN 00128 ZFIELD(:,2:) = XTI_ROAD 00129 END IF 00130 CALL TEB_PROFILE_GRIB(XGRID_FLOOR) 00131 ! 00132 !* 4. Profile of temperatures in walls 00133 ! -------------------------------- 00134 00135 CASE('T_WALLA','T_WALLB') 00136 CALL READ_GRIB_T_TEB(HFILE,KLUOUT,YINMODEL,ZTI_BLD,ZMASK,ZFIELD,ZD) 00137 CALL TEB_PROFILE_GRIB(XGRID_WALL) 00138 00139 CASE('T_WIN1') 00140 SELECT CASE (YINMODEL) 00141 CASE ('ECMWF ','ARPEGE','ALADIN','MOCAGE') 00142 CALL READ_GRIB_TS(HFILE,KLUOUT,YINMODEL,ZMASK,ZFIELD1D) 00143 ALLOCATE(PFIELD(NNI,1)) 00144 PFIELD(:,1) = ZFIELD1D(:) 00145 DEALLOCATE(ZFIELD1D) 00146 END SELECT 00147 ! 00148 !* 5. Profile of temperatures in roofs 00149 ! -------------------------------- 00150 ! 00151 CASE('T_ROOF') 00152 CALL READ_GRIB_T_TEB(HFILE,KLUOUT,YINMODEL,ZTI_BLD,ZMASK,ZFIELD,ZD) 00153 CALL TEB_PROFILE_GRIB(XGRID_ROOF) 00154 ! 00155 !* 5.bis Profile of temperatures in thermal mass 00156 ! ----------------------------------------- 00157 ! 00158 CASE('T_MASS') 00159 ALLOCATE(PFIELD(NNI,3)) 00160 PFIELD(:,:) = ZTI_BLD 00161 ! 00162 !* 6. Canyon air temperature 00163 ! ---------------------- 00164 ! 00165 CASE('T_CAN ') 00166 SELECT CASE (YINMODEL) 00167 CASE ('ECMWF ','ARPEGE','ALADIN','MOCAGE') 00168 CALL READ_GRIB_T2(HFILE,KLUOUT,YINMODEL,ZMASK,ZFIELD1D) 00169 ALLOCATE(PFIELD(SIZE(ZFIELD1D),1)) 00170 PFIELD(:,1) = ZFIELD1D(:) 00171 DEALLOCATE(ZFIELD1D) 00172 END SELECT 00173 ! 00174 !* 7. Canyon air humidity 00175 ! ------------------- 00176 ! 00177 CASE('Q_CAN ') 00178 SELECT CASE (YINMODEL) 00179 CASE ('ECMWF ','ARPEGE','ALADIN','MOCAGE') 00180 ALLOCATE(PFIELD(NNI,1)) 00181 PFIELD(:,1) = 0.01 00182 END SELECT 00183 00184 ! 00185 !* 9. Deep road temperature 00186 ! --------------------- 00187 00188 CASE('TI_ROAD') 00189 IF (XTI_ROAD==XUNDEF) THEN 00190 CALL READ_GRIB_T2(HFILE,KLUOUT,YINMODEL,ZMASK,ZFIELD1D) 00191 ALLOCATE(PFIELD(SIZE(ZFIELD1D),1)) 00192 PFIELD(:,1) = ZFIELD1D(:) 00193 DEALLOCATE(ZFIELD1D) 00194 ELSE 00195 ALLOCATE(PFIELD(NNI,1)) 00196 PFIELD = XTI_ROAD 00197 END IF 00198 00199 00200 !* 9. Building temperatures/moisture 00201 ! -------------------- 00202 00203 CASE('TI_BLD ') 00204 ALLOCATE(PFIELD(NNI,1)) 00205 PFIELD = ZTI_BLD 00206 00207 CASE('T_WIN2') 00208 ALLOCATE(PFIELD(NNI,1)) 00209 PFIELD = ZTI_BLD 00210 00211 CASE('QI_BLD ') 00212 ALLOCATE(PFIELD(NNI,1)) 00213 PFIELD(:,1) = XUNDEF 00214 00215 !* 10. Other quantities (water reservoirs) 00216 ! ---------------- 00217 00218 CASE DEFAULT 00219 ALLOCATE(PFIELD(NNI,1)) 00220 PFIELD = 0. 00221 00222 END SELECT 00223 ! 00224 DEALLOCATE(ZMASK) 00225 ! 00226 !* 4. Interpolation method 00227 ! -------------------- 00228 ! 00229 CINTERP_TYPE='HORIBL' 00230 ! 00231 !------------------------------------------------------------------------------------- 00232 !------------------------------------------------------------------------------------- 00233 ! 00234 IF (LHOOK) CALL DR_HOOK('PREP_TEB_GRIB',1,ZHOOK_HANDLE) 00235 CONTAINS 00236 ! 00237 !------------------------------------------------------------------------------------- 00238 !------------------------------------------------------------------------------------- 00239 SUBROUTINE TEB_PROFILE_GRIB(PGRID) 00240 !------------------------------------------------------------------------------------- 00241 ! 00242 REAL, DIMENSION(:), INTENT(IN) :: PGRID ! destination grid 00243 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00244 ! 00245 ! 00246 !------------------------------------------------------------------------------------- 00247 ! 00248 !* interpolation on fine vertical grid 00249 IF (LHOOK) CALL DR_HOOK('TEB_PROFILE_GRIB',0,ZHOOK_HANDLE) 00250 ALLOCATE(PFIELD(SIZE(ZFIELD,1),SIZE(PGRID))) 00251 CALL INTERP_GRID(ZD,ZFIELD,PGRID,PFIELD) 00252 ! 00253 !* end 00254 DEALLOCATE(ZFIELD) 00255 DEALLOCATE(ZD) 00256 IF (LHOOK) CALL DR_HOOK('TEB_PROFILE_GRIB',1,ZHOOK_HANDLE) 00257 00258 END SUBROUTINE TEB_PROFILE_GRIB 00259 ! 00260 !------------------------------------------------------------------------------------- 00261 END SUBROUTINE PREP_TEB_GRIB