SURFEX v7.3
General documentation of Surfex
|
00001 ! ########################################################################## 00002 SUBROUTINE ROAD_LAYER_E_BUDGET(PT_ROAD, PTSTEP, PHC_ROAD, PTC_ROAD, PD_ROAD, & 00003 PDN_ROAD, PRHOA, PAC_ROAD, PAC_ROAD_WAT, & 00004 PLW_RAD, PPS, PQSAT_ROAD, PDELT_ROAD, PEXNS, & 00005 PABS_SW_ROAD, PGSNOW_ROAD, PQ_LOWCAN, PT_LOWCAN, & 00006 PTS_WALL_A, PTS_WALL_B, PTSNOW_ROAD, & 00007 PTS_GARDEN, PTS_WIN, & 00008 PLW_WA_TO_R, PLW_WB_TO_R, PLW_S_TO_R, PLW_WIN_TO_R, & 00009 PEMIS_ROAD, PEMIT_LW_ROAD, PDQS_ROAD, PABS_LW_ROAD, & 00010 PHFREE_ROAD, PLEFREE_ROAD, PIMB_ROAD, PRR ) 00011 ! ########################################################################## 00012 ! 00013 !!**** *ROAD_LAYER_E_BUDGET* 00014 !! 00015 !! PURPOSE 00016 !! ------- 00017 ! 00018 ! Computes the evoultion of roads surface temperatures 00019 ! 00020 ! 00021 !!** METHOD 00022 ! ------ 00023 ! 00024 ! 6 : equations for evolution of Ts_road 00025 ! ********************************** 00026 ! 00027 ! 00028 ! dTr_1(t) / dt = 1/(dr_1*Cr_1) * ( Rn_r - H_r - LE_r 00029 ! - 2*Kr_1*(Tr_1-Tr_2)/(dr_1 +dr_2) ) 00030 ! 00031 ! dTr_k(t) / dt = 1/(dr_k*Cr_k) * (- 2*Kr_k-1*(Tr_k-Tr_k-1)/(dr_k-1 +dr_k) 00032 ! - 2*Kr_k *(Tr_k-Tr_k+1)/(dr_k+1 +dr_k) ) 00033 ! 00034 ! with 00035 ! 00036 ! K*_k = (d*_k+ d*_k+1)/(d*_k/k*_k+ d*_k+1/k*_k+1) 00037 ! 00038 ! Rn_r = abs_Rg_r 00039 ! - sigma * emis_r * Ts_r**4 (t+dt) 00040 ! + emis_r * SVF_r * LWR 00041 ! + sigma * emis_r * emis_w * (1-SVF_r) * Ts_w**4 (t+dt) 00042 ! + emis_r (1-emis_w) * (1-SVF_r) * SVF_w * LWR 00043 ! + sigma * emis_r * emis_w * (1-emis_w) * (1-SVF_r) * (1-2*SVF_w) * Ts_w**4 (t+dt) 00044 ! + sigma * emis_r * emis_r * (1-emis_w) * (1-SVF_r) * SVF_w * Ts_r**4 (t+dt) 00045 ! 00046 ! H_r = rho Cp CH V ( Ts_r (t+dt) - Ta_canyon ) 00047 ! 00048 ! LE_r = rho Lv CH V ( qs_r (t+dt) - qa_canyon ) 00049 ! 00050 ! 00051 ! The system is implicited (or semi-implicited). 00052 ! 00053 ! ZIMPL=1 ---> implicit system 00054 ! ZIMPL=0.5 ---> semi-implicit system 00055 ! ZIMPL=0 ---> explicit system 00056 ! 00057 ! 00058 ! 00059 ! 00060 !! EXTERNAL 00061 !! -------- 00062 !! 00063 !! 00064 !! IMPLICIT ARGUMENTS 00065 !! ------------------ 00066 !! 00067 !! MODD_CST 00068 !! 00069 !! 00070 !! REFERENCE 00071 !! --------- 00072 !! 00073 !! 00074 !! AUTHOR 00075 !! ------ 00076 !! 00077 !! V. Masson * Meteo-France * 00078 !! 00079 !! MODIFICATIONS 00080 !! ------------- 00081 !! Original 23/01/98 00082 !! 21/11/01 (V. Masson and A. Lemonsu) bug of latent flux 00083 !! for very strong evaporation (all reservoir emptied 00084 !! in one time-step) 00085 !! 02/11 (V. Masson) split of the routine for roads and walls separately 00086 !! G. Pigeon 09/2012: add heating/cooling of rain from air temperature 00087 !! to surface road temp. for the road energy budget 00088 !------------------------------------------------------------------------------- 00089 ! 00090 !* 0. DECLARATIONS 00091 ! ------------ 00092 ! 00093 USE MODD_CSTS,ONLY : XCPD, XLVTT, XSTEFAN, XCL 00094 ! 00095 USE MODE_THERMOS 00096 ! 00097 USE MODI_LAYER_E_BUDGET 00098 USE MODI_LAYER_E_BUDGET_GET_COEF 00099 ! 00100 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00101 USE PARKIND1 ,ONLY : JPRB 00102 ! 00103 IMPLICIT NONE 00104 ! 00105 !* 0.1 declarations of arguments 00106 ! 00107 ! 00108 REAL, DIMENSION(:,:), INTENT(INOUT) :: PT_ROAD ! road layers temperatures 00109 REAL, INTENT(IN) :: PTSTEP ! time step 00110 REAL, DIMENSION(:,:), INTENT(IN) :: PHC_ROAD ! heat capacity for road layers 00111 REAL, DIMENSION(:,:), INTENT(IN) :: PTC_ROAD ! thermal conductivity for road layers 00112 REAL, DIMENSION(:,:), INTENT(IN) :: PD_ROAD ! depth of road layers 00113 REAL, DIMENSION(:), INTENT(IN) :: PDN_ROAD ! road snow fraction 00114 REAL, DIMENSION(:), INTENT(IN) :: PRHOA ! rho 00115 REAL, DIMENSION(:), INTENT(IN) :: PAC_ROAD ! aerodynamical conductance 00116 ! ! between road and canyon 00117 REAL, DIMENSION(:), INTENT(IN) :: PAC_ROAD_WAT ! aerodynamical conductance 00118 ! ! between road and canyon 00119 ! ! (for water) 00120 REAL, DIMENSION(:), INTENT(IN) :: PLW_RAD ! atmospheric infrared radiation 00121 REAL, DIMENSION(:), INTENT(IN) :: PPS ! pressure at the surface 00122 REAL, DIMENSION(:), INTENT(IN) :: PQSAT_ROAD ! q_sat(Ts) 00123 REAL, DIMENSION(:), INTENT(IN) :: PDELT_ROAD ! fraction of water 00124 REAL, DIMENSION(:), INTENT(IN) :: PEXNS ! surface Exner function 00125 REAL, DIMENSION(:), INTENT(IN) :: PABS_SW_ROAD ! absorbed solar radiation 00126 REAL, DIMENSION(:), INTENT(IN) :: PGSNOW_ROAD ! road snow conduction 00127 ! ! heat fluxes at mantel 00128 ! ! base 00129 REAL, DIMENSION(:), INTENT(IN) :: PQ_LOWCAN ! and specific humidity 00130 REAL, DIMENSION(:), INTENT(IN) :: PT_LOWCAN ! low canyon air temperature 00131 REAL, DIMENSION(:), INTENT(IN) :: PTS_WALL_A ! wall surface temperature 00132 REAL, DIMENSION(:), INTENT(IN) :: PTS_WALL_B ! wall surface temperature 00133 REAL, DIMENSION(:), INTENT(IN) :: PTSNOW_ROAD ! road snow temperature 00134 REAL, DIMENSION(:), INTENT(IN) :: PTS_GARDEN ! green area surface temperature 00135 REAL, DIMENSION(:), INTENT(IN) :: PTS_WIN ! window outdoor surface temperature [K] 00136 ! 00137 REAL, DIMENSION(:), INTENT(IN) :: PLW_WA_TO_R ! LW interactions wall -> road 00138 REAL, DIMENSION(:), INTENT(IN) :: PLW_WB_TO_R ! LW interactions wall -> road 00139 REAL, DIMENSION(:), INTENT(IN) :: PLW_S_TO_R ! LW interactions sky -> road 00140 REAL, DIMENSION(:), INTENT(IN) :: PLW_WIN_TO_R ! LW interactions window -> road 00141 ! 00142 REAL, DIMENSION(:), INTENT(IN) :: PEMIS_ROAD ! road emissivity 00143 ! 00144 REAL, DIMENSION(:), INTENT(OUT) :: PEMIT_LW_ROAD! LW flux emitted by the road (W/m² of road) 00145 REAL, DIMENSION(:), INTENT(OUT) :: PDQS_ROAD !heat storage inside the road 00146 REAL, DIMENSION(:), INTENT(OUT) :: PABS_LW_ROAD ! absorbed infrared rad. 00147 REAL, DIMENSION(:), INTENT(OUT) :: PHFREE_ROAD ! sensible heat flux on the 00148 ! snow free part of the road [W m-2] 00149 REAL, DIMENSION(:), INTENT(OUT) :: PLEFREE_ROAD ! latent heat flux on the 00150 ! snow free part of the road [W m-2] 00151 REAL, DIMENSION(:), INTENT(OUT) :: PIMB_ROAD ! road residual energy imbalance 00152 ! for verification [W m-2] 00153 REAL, DIMENSION(:), INTENT(IN) :: PRR ! rain rate [kg m-2 s-1] 00154 00155 ! 00156 !* 0.2 declarations of local variables 00157 ! 00158 REAL :: ZIMPL=1.0 ! implicit coefficient 00159 REAL :: ZEXPL=0.0 ! explicit coefficient 00160 ! 00161 REAL, DIMENSION(SIZE(PT_ROAD,1),SIZE(PT_ROAD,2)) :: ZA, ! lower diag. 00162 ZB, ! main diag. 00163 ZC, ! upper diag. 00164 ZY ! r.h.s. 00165 ! 00166 REAL, DIMENSION(SIZE(PPS)) :: ZDN_ROAD ! snow-covered surface fraction on road 00167 REAL, DIMENSION(SIZE(PPS)) :: ZDF_ROAD ! snow-free surface fraction on road 00168 ! 00169 REAL, DIMENSION(SIZE(PPS)) :: ZDQSAT_ROAD ! dq_sat/dTs 00170 REAL, DIMENSION(SIZE(PPS)) :: ZRHO_ACF_R ! rho * conductance 00171 ! ! * snow-free f. 00172 REAL, DIMENSION(SIZE(PPS)) :: ZRHO_ACF_R_WAT ! rho * conductance for water 00173 ! ! * snow-free f. 00174 ! thermal capacity times layer depth 00175 REAL, DIMENSION(SIZE(PPS)) :: ZTS_ROAD ! road surface temperature 00176 REAL, DIMENSION(SIZE(PPS)) :: ZHEAT_RR ! heat used too cool/heat the rain from the roof 00177 REAL, DIMENSION(SIZE(PPS)) :: ZT_SKY ! road surface temperature 00178 ! 00179 INTEGER :: IROAD_LAYER ! number of road layers 00180 INTEGER :: JJ ! loop counter 00181 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00182 !------------------------------------------------------------------------------- 00183 IF (LHOOK) CALL DR_HOOK('ROAD_LAYER_E_BUDGET',0,ZHOOK_HANDLE) 00184 ! 00185 CALL LAYER_E_BUDGET_GET_COEF( PT_ROAD, PTSTEP, ZIMPL, PHC_ROAD, PTC_ROAD, PD_ROAD, & 00186 ZA, ZB, ZC, ZY ) 00187 ! 00188 !* 1. Layer thermal properties 00189 ! ------------------------ 00190 ! 00191 IROAD_LAYER = SIZE(PT_ROAD,2) 00192 ! 00193 DO JJ=1, SIZE(PDN_ROAD) 00194 ! 00195 ZDN_ROAD(JJ) = PDN_ROAD (JJ) 00196 ZDF_ROAD(JJ) = 1. - ZDN_ROAD (JJ) 00197 ! 00198 !* 2.3 Surface temperatures 00199 ! -------------------- 00200 ! 00201 ZTS_ROAD(JJ) = PT_ROAD(JJ,1) 00202 ! 00203 !* 2.2 flux properties 00204 ! --------------- 00205 ! 00206 ZRHO_ACF_R (JJ) = PRHOA(JJ) * PAC_ROAD(JJ) * ZDF_ROAD(JJ) 00207 ZRHO_ACF_R_WAT(JJ) = PRHOA(JJ) * PAC_ROAD_WAT(JJ) * ZDF_ROAD(JJ) 00208 ! 00209 !* 2.4 Sky temperature 00210 ! --------------- 00211 ! 00212 ZT_SKY(JJ) = (PLW_RAD(JJ)/XSTEFAN)**0.25 00213 ! 00214 ENDDO 00215 ! 00216 !* 2.4 qsat, dqsat/dTs, and humidity for roads 00217 ! --------------------------------------- 00218 ! 00219 ZDQSAT_ROAD(:) = DQSAT(ZTS_ROAD(:),PPS(:),PQSAT_ROAD(:)) 00220 ! 00221 !------------------------------------------------------------------------------- 00222 ! 00223 !* 3. First road layers coefficients (in contact with outdoor env.) 00224 ! ------------------------------------------------------------- 00225 ! 00226 DO JJ=1,SIZE(PT_ROAD,1) 00227 ! 00228 ZB(JJ,1) = ZB(JJ,1) + ZIMPL * XCPD/PEXNS(JJ) * ZRHO_ACF_R(JJ) & 00229 + ZIMPL * XLVTT * ZRHO_ACF_R_WAT(JJ) * PDELT_ROAD(JJ) * ZDQSAT_ROAD(JJ) 00230 ! 00231 ZY(JJ,1) = ZY(JJ,1) & 00232 + XCPD/PEXNS(JJ) * ZRHO_ACF_R(JJ) * ( PT_LOWCAN(JJ) - ZEXPL * ZTS_ROAD(JJ) ) & 00233 + ZDF_ROAD(JJ)*PABS_SW_ROAD(JJ) + ZDN_ROAD(JJ)*PGSNOW_ROAD(JJ) & 00234 + XLVTT * ZRHO_ACF_R_WAT(JJ) * PDELT_ROAD(JJ) & 00235 * ( PQ_LOWCAN(JJ) - PQSAT_ROAD(JJ) + ZIMPL * ZDQSAT_ROAD(JJ) * ZTS_ROAD(JJ) ) 00236 ! 00237 ZB(JJ,1) = ZB(JJ,1) & 00238 + ZIMPL * ZDF_ROAD(JJ) * ( PLW_S_TO_R(JJ) + PLW_WA_TO_R(JJ) + & 00239 PLW_WB_TO_R(JJ) + PLW_WIN_TO_R(JJ) + & 00240 PRR(JJ) * XCL ) ! heat/cool rain 00241 ! 00242 ZY(JJ,1) = ZY(JJ,1) & 00243 + ZDF_ROAD(JJ) * ( & 00244 PLW_S_TO_R (JJ) * (ZT_SKY(JJ) - ZEXPL * ZTS_ROAD(JJ)) & 00245 + PLW_WIN_TO_R(JJ) * (PTS_WIN(JJ) - ZEXPL * ZTS_ROAD(JJ)) & 00246 + PLW_WA_TO_R (JJ) * (PTS_WALL_A(JJ) - ZEXPL * ZTS_ROAD(JJ)) & 00247 + PLW_WB_TO_R (JJ) * (PTS_WALL_B(JJ) - ZEXPL * ZTS_ROAD(JJ)) & 00248 + PRR(JJ) * XCL * (PT_LOWCAN(JJ)- ZEXPL * ZTS_ROAD(JJ) )) !heat/cool rain 00249 ! 00250 ENDDO 00251 ! 00252 ! 00253 CALL LAYER_E_BUDGET( PT_ROAD, PTSTEP, ZIMPL, PHC_ROAD, PTC_ROAD, PD_ROAD, & 00254 ZA, ZB, ZC, ZY, PDQS_ROAD ) 00255 ! 00256 !------------------------------------------------------------------------------- 00257 ! 00258 !* 12. Road and wall absorbed infra-red radiation on snow-free surfaces 00259 ! ---------------------------------------------------------------- 00260 ! 00261 !* absorbed LW 00262 DO JJ=1,SIZE(PT_ROAD,1) 00263 ! 00264 ! surface temperature used in energy balance 00265 ZTS_ROAD(JJ) = ZEXPL * ZTS_ROAD(JJ) + ZIMPL * PT_ROAD(JJ,1) 00266 PABS_LW_ROAD(JJ) = PLW_S_TO_R (JJ) * (ZT_SKY(JJ) - ZTS_ROAD(JJ)) + & 00267 PLW_WA_TO_R (JJ) * (PTS_WALL_A(JJ) - ZTS_ROAD(JJ)) + & 00268 PLW_WB_TO_R (JJ) * (PTS_WALL_B(JJ) - ZTS_ROAD(JJ)) + & 00269 PLW_WIN_TO_R(JJ) * (PTS_WIN(JJ) - ZTS_ROAD(JJ)) 00270 ! 00271 !* 9. Road emitted LW radiation on snow-free surfaces 00272 ! ----------------------------------------------- 00273 PEMIT_LW_ROAD(JJ) = XSTEFAN * PT_ROAD(JJ,1)**4 + & 00274 (1 - PEMIS_ROAD(JJ))/PEMIS_ROAD(JJ) * PABS_LW_ROAD(JJ) 00275 ! 00276 !* 10. road and wall sensible heat flux 00277 ! -------------------------------- 00278 ! 00279 PHFREE_ROAD(JJ) = ZRHO_ACF_R(JJ) * XCPD/PEXNS(JJ) * & 00280 ( ZIMPL*PT_ROAD(JJ,1) + ZEXPL*ZTS_ROAD(JJ) - PT_LOWCAN(JJ) ) 00281 ! 00282 !* 11 road latent heat flux 00283 ! --------------------- 00284 ! 00285 PLEFREE_ROAD(JJ) = ZRHO_ACF_R_WAT(JJ) * XLVTT * PDELT_ROAD(JJ) * & 00286 ( PQSAT_ROAD(JJ) - PQ_LOWCAN(JJ) + & 00287 ZIMPL * ZDQSAT_ROAD(JJ) * (PT_ROAD(JJ,1) - ZTS_ROAD(JJ)) ) 00288 ZHEAT_RR(JJ) = PRR(JJ) * XCL * (ZTS_ROAD(JJ) - PT_LOWCAN(JJ)) 00289 ! 00290 !* 12 heat storage inside roads 00291 ! ------------------------- 00292 !² 00293 !* 13 road energy residual imbalance for verification 00294 ! ----------------------------------------------- 00295 ! 00296 PIMB_ROAD(JJ) = PABS_SW_ROAD(JJ) + PABS_LW_ROAD(JJ) - PDQS_ROAD(JJ) & 00297 - ZDF_ROAD(JJ) * ( PHFREE_ROAD(JJ) + PLEFREE_ROAD(JJ)) & 00298 - ZDN_ROAD(JJ) * PGSNOW_ROAD(JJ) 00299 ! 00300 ENDDO 00301 ! 00302 !------------------------------------------------------------------------------- 00303 IF (LHOOK) CALL DR_HOOK('ROAD_LAYER_E_BUDGET',1,ZHOOK_HANDLE) 00304 ! 00305 END SUBROUTINE ROAD_LAYER_E_BUDGET 00306