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