|
SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE TEB_CANOPY(KI,KLVL,PZ,PZF,PDZ,PDZF,PBLD,PBLD_HEIGHT,PWALL_O_HOR,PPA,PRHOA,PU, & 00003 PDUWDU_ROAD, PUW_ROOF, PDUWDU_ROOF, & 00004 PH_WALL,PH_ROOF,PE_ROOF,PAC_ROAD,PAC_ROAD_WAT, & 00005 PFORC_U,PDFORC_UDU,PFORC_E,PDFORC_EDE,PFORC_T,PDFORC_TDT,PFORC_Q,PDFORC_QDQ) 00006 ! ############################################################################### 00007 ! 00008 !!**** *TEB_CANOPY_n * - prepares forcing for canopy air model 00009 !! 00010 !! PURPOSE 00011 !! ------- 00012 ! 00013 !!** METHOD 00014 !! ------ 00015 !! 00016 !! REFERENCE 00017 !! --------- 00018 !! 00019 !! 00020 !! AUTHOR 00021 !! ------ 00022 !! V. Masson 00023 !! 00024 !! MODIFICATIONS 00025 !! ------------- 00026 !! Original 07/2006 00027 !!--------------------------------------------------------------- 00028 ! 00029 ! 00030 USE MODD_CSTS, ONLY : XRD, XCPD, XP00, XG, XPI 00031 USE MODD_SURF_PAR, ONLY : XUNDEF 00032 ! 00033 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00034 USE PARKIND1 ,ONLY : JPRB 00035 ! 00036 USE MODI_CANOPY 00037 ! 00038 IMPLICIT NONE 00039 ! 00040 !* 0.1 declarations of arguments 00041 ! 00042 INTEGER, INTENT(IN) :: KI ! number of points 00043 INTEGER, INTENT(IN) :: KLVL ! number of levels in canopy 00044 REAL, DIMENSION(KI,KLVL), INTENT(IN) :: PZ ! heights of canopy levels (m) 00045 REAL, DIMENSION(KI,KLVL), INTENT(IN) :: PZF ! heights of bottom of canopy levels (m) 00046 REAL, DIMENSION(KI,KLVL), INTENT(IN) :: PDZ ! depth of canopy levels (m) 00047 REAL, DIMENSION(KI,KLVL), INTENT(IN) :: PDZF ! depth between canopy levels (m) 00048 REAL, DIMENSION(KI), INTENT(IN) :: PBLD ! building density (-) 00049 REAL, DIMENSION(KI), INTENT(IN) :: PBLD_HEIGHT ! building height (m) 00050 REAL, DIMENSION(KI), INTENT(IN) :: PWALL_O_HOR ! wall surf. / hor. surf. (-) 00051 00052 REAL, DIMENSION(KI,KLVL), INTENT(IN) :: PU ! wind for each canopy layer (m/s) 00053 ! 00054 REAL, DIMENSION(KI), INTENT(IN) :: PPA ! air pressure (Pa) 00055 REAL, DIMENSION(KI), INTENT(IN) :: PRHOA ! air density (kg/m3) 00056 ! 00057 REAL, DIMENSION(KI), INTENT(IN) :: PDUWDU_ROAD ! derivative of road friction flux (m/s) 00058 REAL, DIMENSION(KI), INTENT(IN) :: PUW_ROOF ! friction flux for roof surfaces (m2/s2) 00059 REAL, DIMENSION(KI), INTENT(IN) :: PDUWDU_ROOF ! derivative of roof friction flux (m/s) 00060 REAL, DIMENSION(KI), INTENT(IN) :: PH_WALL ! flux of heat for wall surfaces (W/m2) 00061 REAL, DIMENSION(KI), INTENT(IN) :: PH_ROOF ! flux of heat for roof surfaces (W/m2) 00062 REAL, DIMENSION(KI), INTENT(IN) :: PE_ROOF ! flux of vapor for roof surfaces (kg/m2/s) 00063 REAL, DIMENSION(KI), INTENT(IN) :: PAC_ROAD ! road aerodynamical conductance () 00064 REAL, DIMENSION(KI), INTENT(IN) :: PAC_ROAD_WAT ! road water aerodynamical conductance () 00065 ! 00066 REAL, DIMENSION(KI,KLVL), INTENT(OUT) :: PFORC_U ! tendency of wind due to canopy drag (m/s2) 00067 REAL, DIMENSION(KI,KLVL), INTENT(OUT) :: PDFORC_UDU! formal derivative of the tendency of 00068 ! ! wind due to canopy drag (1/s) 00069 REAL, DIMENSION(KI,KLVL), INTENT(OUT) :: PFORC_E ! tendency of TKE due to canopy drag (m2/s3) 00070 REAL, DIMENSION(KI,KLVL), INTENT(OUT) :: PDFORC_EDE! formal derivative of the tendency of 00071 ! ! TKE due to canopy drag (1/s) 00072 REAL, DIMENSION(KI,KLVL), INTENT(OUT) :: PFORC_T ! tendency of Temp due to canopy drag (T/s) 00073 REAL, DIMENSION(KI,KLVL), INTENT(OUT) :: PDFORC_TDT! formal derivative of the tendency of 00074 ! ! Temp due to canopy drag (1/s) 00075 REAL, DIMENSION(KI,KLVL), INTENT(OUT) :: PFORC_Q ! tendency of Temp due to canopy drag (kg/m3/s) 00076 REAL, DIMENSION(KI,KLVL), INTENT(OUT) :: PDFORC_QDQ! formal derivative of the tendency of 00077 ! ! Temp due to canopy drag (1/s) 00078 ! 00079 !* 0.2 declarations of local variables 00080 ! 00081 INTEGER :: JLAYER ! loop counter on canopy heights 00082 ! 00083 REAL, DIMENSION(KI,KLVL) :: ZCDRAG ! drag coefficient in canopy 00084 REAL, DIMENSION(KI,KLVL) :: ZSH ! horizontal surface of building 00085 ! (road&roof) for each canopy level 00086 REAL, DIMENSION(KI,KLVL) :: ZSV ! vertical surface of building 00087 ! (walls) for each canopy level 00088 REAL, DIMENSION(KI,KLVL) :: ZFORC 00089 REAL, DIMENSION(KI,KLVL) :: ZDENSITY 00090 REAL, DIMENSION(KI,KLVL) :: ZAIRVOL ! Fraction of air for each canopy level total volume 00091 REAL, DIMENSION(KI,KLVL) :: ZP ! pressure at full levels 00092 REAL, DIMENSION(KI,KLVL) :: ZEXN ! Exner function at full levels 00093 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00094 ! 00095 !------------------------------------------------------------------------------------- 00096 ! 00097 !* 1. Computations of canopy grid characteristics 00098 ! ------------------------------------------- 00099 ! 00100 ! 00101 !* 1.2 Proportion of horizontal surfaces for each canopy level 00102 ! 00103 IF (LHOOK) CALL DR_HOOK('TEB_CANOPY',0,ZHOOK_HANDLE) 00104 ZSH(:,:) = 0. 00105 ZSH(:,1) = (1.-PBLD(:)) 00106 ! 00107 WHERE( PZF(:,2)>=PBLD_HEIGHT(:) ) ZSH(:,2) = PBLD(:) ! the roofs cannot be at the same level as roads 00108 DO JLAYER = 2,KLVL-1 00109 WHERE( PZF(:,JLAYER)<PBLD_HEIGHT(:) .AND. PZF(:,JLAYER+1)>=PBLD_HEIGHT(:) ) ZSH(:,JLAYER) = PBLD(:) 00110 END DO 00111 WHERE( PZF(:,KLVL)<PBLD_HEIGHT(:) ) ZSH(:,KLVL) = PBLD(:) 00112 ! 00113 !* 2.1 Drag coefficient by walls 00114 ! ------------------------- 00115 ! 00116 ZCDRAG(:,:) = 0.40 00117 !* integration for all canyon directions (for facing wind walls) 00118 ZCDRAG(:,:) = ZCDRAG(:,:) / XPI 00119 ! 00120 !* 1.4 No building volume 00121 ! 00122 ! * in order to take into account building volume, further developments must be 00123 ! done in the atmospheric model. 00124 ! If these changes are not done, to take into account building volume in the 00125 ! present routine alone would not be energetically coeherent (there would be 00126 ! too much energy release for heat and vapor or consumed for wind). 00127 ! 00128 ZAIRVOL = 1. 00129 ! 00130 !* 1.2 Discretization on each canopy level 00131 ! 00132 DO JLAYER=1,KLVL 00133 ZDENSITY(:,JLAYER) = PWALL_O_HOR(:) 00134 ENDDO 00135 ! 00136 CALL CANOPY(KI, KLVL, PZF, PDZ, PBLD_HEIGHT, ZDENSITY, ZCDRAG, PU, ZAIRVOL, & 00137 ZSV, ZFORC, PFORC_U, PDFORC_UDU, PFORC_E, PDFORC_EDE ) 00138 ! 00139 !------------------------------------------------------------------------------------- 00140 ! 00141 !* 2. Computations of wind tendency due to canopy drag 00142 ! ------------------------------------------------ 00143 ! 00144 ! Ext = - Cdrag * u- * u- * Sv/Vair vertical surfaces or trees 00145 ! - u'w'(roof) * Sh/Vair horizontal surfaces (except road) 00146 ! - u'w'(road) * Sh/Vair horizontal surfaces (road) 00147 ! 00148 ! with Vair = Vair/Vtot * Vtot = (Vair/Vtot) * Stot * Dz 00149 ! and Sv/Vair = (Sv/Stot) * Stot/Vair = (Sv/Stot) / (Vair/Vtot) / Dz 00150 ! and Sh/Vair = (Sh/Stot) * Stot/Vair = (Sv/Stot) / (Vair/Vtot) / Dz 00151 ! 00152 !* Note that for the time being, air is assumed to occupy all the space of the grid 00153 ! (buildings have no volume), so that Vair = Vtot 00154 ! 00155 ZFORC(:,:) = ZSH(:,:)/ZAIRVOL(:,:)/PDZ(:,:) 00156 ! 00157 !* 2.3 Drag force by roof surfaces 00158 ! --------------------------- 00159 ! 00160 !* drag force by horizontal surfaces 00161 ! 00162 DO JLAYER=2,KLVL 00163 PFORC_U (:,JLAYER) = PFORC_U (:,JLAYER) + PUW_ROOF (:) * ZFORC(:,JLAYER) 00164 PDFORC_UDU(:,JLAYER) = PDFORC_UDU(:,JLAYER) + PDUWDU_ROOF(:) * ZFORC(:,JLAYER) 00165 END DO 00166 ! 00167 !* 2.4 Drag force by road surfaces 00168 ! --------------------------- 00169 ! 00170 !PFORC_U(:,1) = PUW_ROAD(:) / PDZ(:,1) * ZSH(:,1) 00171 PFORC_U (:,1) = PFORC_U (:,1) 00172 PDFORC_UDU(:,1) = PDFORC_UDU(:,1) + PDUWDU_ROAD(:) * ZSH(:,1)/PDZ(:,1) 00173 ! 00174 !------------------------------------------------------------------------------------- 00175 ! 00176 !* 4. Computations of potential temperature tendency due to canopy drag 00177 ! ----------------------------------------------------------------- 00178 ! 00179 PFORC_T (:,:) = 0. 00180 PDFORC_TDT(:,:) = 0. 00181 ! 00182 !* 4.1 Heating from the road surface flux 00183 ! ---------------------------------- 00184 ! 00185 !* surface flux 00186 ! 00187 PDFORC_TDT(:,1) = PDFORC_TDT(:,1) - PAC_ROAD(:) 00188 !!* Warning, the " - PAC_ROAD(:) " term in the equation above is used 00189 ! to improve stability for the first layer of canopy. But the TEB equations 00190 ! for road temperature are not implicited, so this implies that the energy 00191 ! coming from the road as seen by canopy is not equal to the one emitted by 00192 ! TEB. 00193 ! This has no consequence on the conservation of the energy between the 00194 ! surface and the atmosphere, because the heat flux goes directly from TEB to 00195 ! SURF_ATM and then to the atmosphere. Only the canopy air profiles are 00196 ! affected. 00197 ! 00198 ! 00199 !* 4.2 Heating from the walls surface flux 00200 ! ----------------------------------- 00201 ! 00202 DO JLAYER=1,KLVL 00203 ZFORC(:,JLAYER) = 1. / ZAIRVOL(:,JLAYER) / PDZ(:,JLAYER) / PRHOA(:) / XCPD 00204 PFORC_T (:,JLAYER) = PFORC_T(:,JLAYER) + PH_WALL * ZSV(:,JLAYER) * ZFORC(:,JLAYER) 00205 PDFORC_TDT(:,JLAYER) = PDFORC_TDT(:,JLAYER) + 0. 00206 END DO 00207 ! 00208 !* 4.3 Heating from the roof surface flux 00209 ! ---------------------------------- 00210 ! 00211 DO JLAYER=2,KLVL 00212 PFORC_T (:,JLAYER) = PFORC_T(:,JLAYER) + PH_ROOF * ZSH(:,JLAYER) * ZFORC(:,JLAYER) 00213 PDFORC_TDT(:,JLAYER) = PDFORC_TDT(:,JLAYER) + 0. 00214 END DO 00215 ! 00216 !------------------------------------------------------------------------------------- 00217 ! 00218 !* 5. Conversion into temperature tendency 00219 ! ------------------------------------ 00220 ! 00221 DO JLAYER=1,KLVL 00222 ZP(:,JLAYER) = PPA(:) + XG * PRHOA(:) * (PZ(:,KLVL) - PZ(:,JLAYER)) 00223 END DO 00224 ZEXN = (ZP/XP00)**(XRD/XCPD) 00225 ! 00226 PFORC_T = PFORC_T * ZEXN 00227 PDFORC_TDT = PDFORC_TDT * ZEXN 00228 ! 00229 !------------------------------------------------------------------------------------- 00230 ! 00231 !* 6. Computations of humidity tendency due to canopy 00232 ! ----------------------------------------------- 00233 ! 00234 ! 00235 PFORC_Q(:,:) = 0. 00236 PDFORC_QDQ(:,:) = 0. 00237 ! 00238 ! 00239 !* 4.1 Evaporation from the road surface flux 00240 ! -------------------------------------- 00241 ! 00242 !* surface flux 00243 ! 00244 ! 00245 PDFORC_QDQ(:,1) = PDFORC_QDQ(:,1) - PAC_ROAD_WAT(:) 00246 !!* Warning, the " - PAC_ROAD_WAT(:) " term in the equation above is used 00247 ! to improve stability for the first layer of canopy. But the TEB equations 00248 ! for road latent heat flux are not implicited, so this implies that the energy 00249 ! coming from the road as seen by canopy is not equal to the one emitted by 00250 ! TEB. 00251 ! This has no consequence on the conservation of the energy between the 00252 ! surface and the atmosphere, because the latent heat flux goes directly from TEB to 00253 ! SURF_ATM and then to the atmosphere. Only the canopy air profiles are 00254 ! affected. 00255 ! 00256 !* 4.2 Evaporation from the roof surface flux 00257 ! -------------------------------------- 00258 ! 00259 DO JLAYER=2,KLVL 00260 PFORC_Q (:,JLAYER) = PFORC_Q (:,JLAYER) + PE_ROOF * ZSH(:,JLAYER)/ZAIRVOL(:,JLAYER)/PDZ(:,JLAYER) 00261 PDFORC_QDQ(:,JLAYER) = PDFORC_QDQ(:,JLAYER) + 0. 00262 END DO 00263 IF (LHOOK) CALL DR_HOOK('TEB_CANOPY',1,ZHOOK_HANDLE) 00264 ! 00265 !------------------------------------------------------------------------------------- 00266 ! 00267 END SUBROUTINE TEB_CANOPY
1.8.0