SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/road_layer_e_budget.F90
Go to the documentation of this file.
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