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