SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/isba_canopy.F90
Go to the documentation of this file.
00001 !     #########
00002 SUBROUTINE ISBA_CANOPY(KI,KLVL,PZ,PZF,PDZ,PDZF,PHEIGHT,PCANOPY_DENSITY,PU,PTKE,   &
00003                         PUW_GROUND, PDUWDU_GROUND,                                &
00004                         PFORC_U,PDFORC_UDU,PFORC_E,PDFORC_EDE)  
00005 !     ###############################################################################
00006 !
00007 !!****  *ISBA_CANOPY_n * - prepares forcing for canopy air model
00008 !!
00009 !!    PURPOSE
00010 !!    -------
00011 !
00012 !!**  METHOD
00013 !!    ------
00014 !!
00015 !!    REFERENCE
00016 !!    ---------
00017 !!      
00018 !!
00019 !!    AUTHOR
00020 !!    ------
00021 !!     V. Masson 
00022 !!
00023 !!    MODIFICATIONS
00024 !!    -------------
00025 !!      Original    07/2006
00026 !!---------------------------------------------------------------
00027 !
00028 USE MODD_ISBA_n  ,     ONLY : XCDRAG
00029 USE MODD_CSTS,         ONLY : XRD, XCPD, XP00, XG
00030 USE MODD_SURF_PAR,     ONLY : XUNDEF
00031 !
00032 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00033 USE PARKIND1  ,ONLY : JPRB
00034 !
00035 USE MODI_CANOPY
00036 !
00037 IMPLICIT NONE
00038 !
00039 !*      0.1    declarations of arguments
00040 !
00041 INTEGER,                  INTENT(IN)    :: KI        ! number of points
00042 INTEGER,                  INTENT(IN)    :: KLVL      ! number of levels in canopy
00043 REAL, DIMENSION(KI,KLVL), INTENT(IN)    :: PZ        ! heights of canopy levels              (m)
00044 REAL, DIMENSION(KI,KLVL), INTENT(IN)    :: PZF       ! heights of bottom of canopy levels    (m)
00045 REAL, DIMENSION(KI,KLVL), INTENT(IN)    :: PDZ       ! depth   of canopy levels              (m)
00046 REAL, DIMENSION(KI,KLVL), INTENT(IN)    :: PDZF      ! depth between canopy levels           (m)
00047 REAL, DIMENSION(KI),      INTENT(IN)    :: PHEIGHT     ! canopy height                       (m)
00048 REAL, DIMENSION(KI),      INTENT(IN)    :: PCANOPY_DENSITY ! canopy density                  (-)
00049 
00050 REAL, DIMENSION(KI,KLVL), INTENT(IN)    :: PU        ! wind for each canopy layer            (m/s)
00051 REAL, DIMENSION(KI,KLVL), INTENT(IN)    :: PTKE      ! Tke  for each canopy layer            (m2/s2)
00052 !
00053 REAL, DIMENSION(KI),      INTENT(IN)    :: PUW_GROUND  ! friction flux for ground surface       (m2/s2)
00054 REAL, DIMENSION(KI),      INTENT(IN)    :: PDUWDU_GROUND  ! derivative of ground friction flux   (m/s)
00055 !
00056 REAL, DIMENSION(KI,KLVL), INTENT(OUT)   :: PFORC_U   ! tendency of wind due to canopy drag   (m/s2)
00057 REAL, DIMENSION(KI,KLVL), INTENT(OUT)   :: PDFORC_UDU! formal derivative of the tendency of
00058 !                                                    ! wind due to canopy drag               (1/s)
00059 REAL, DIMENSION(KI,KLVL), INTENT(OUT)   :: PFORC_E   ! tendency of TKE  due to canopy drag   (m2/s3)
00060 REAL, DIMENSION(KI,KLVL), INTENT(OUT)   :: PDFORC_EDE! formal derivative of the tendency of
00061 !                                                    ! TKE  due to canopy drag               (1/s)
00062 !
00063 !*      0.2    declarations of local variables
00064 !
00065 INTEGER                  :: JLAYER    ! loop counter on canopy heights
00066 !         
00067 REAL, DIMENSION(KI,KLVL) :: ZCDRAG    ! drag coefficient in canopy
00068 REAL, DIMENSION(KI,KLVL) :: ZDENSITY  ! vegetation density for each canopy level
00069 REAL, DIMENSION(KI,KLVL) :: ZSV       ! vertical surface for each canopy level
00070 REAL, DIMENSION(KI,KLVL) :: ZFORC
00071 REAL, DIMENSION(KI,KLVL) :: ZAIRVOL   ! Fraction of air for each canopy level total volume
00072 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00073 !
00074 !-------------------------------------------------------------------------------------
00075 !
00076 !*      1.     Computations of canopy grid characteristics
00077 !              -------------------------------------------
00078 !
00079 !
00080 !*      1.1    Proportion of leaves for each canopy level 
00081 !             (parabolic shape, maximum at mid canopy height, with the same
00082 !             total LAI on the canopy)
00083 !
00084 IF (LHOOK) CALL DR_HOOK('ISBA_CANOPY',0,ZHOOK_HANDLE)
00085 ZDENSITY(:,:) = 0.
00086 DO JLAYER=1,KLVL
00087   WHERE(PHEIGHT(:)>0.)  &
00088     ZDENSITY(:,JLAYER) = 1.5 * MAX(PCANOPY_DENSITY(:) * 4. * PZ(:,JLAYER) * (PHEIGHT(:)-PZ(:,JLAYER)) / PHEIGHT(:)**2, 0.)  
00089 END DO
00090 !
00091 !*      2.1    Drag coefficient by vegetation (Patton et al 2001)
00092 !              ------------------------------
00093 !
00094 ZCDRAG(:,:) = XCDRAG
00095 !
00096 !*      1.4    No building volume
00097 !
00098 ! * in order to take into account building volume, further developments must be
00099 !   done in the atmospheric model.
00100 !   If these changes are not done, to take into account building volume in the
00101 !   present routine alone would not be energetically coeherent (there would be
00102 !   too much energy release for heat and vapor or consumed for wind).
00103 !
00104 ZAIRVOL(:,:) = 1.
00105 !
00106 !*      1.2    Discretization on each canopy level
00107 !
00108  CALL CANOPY(KI, KLVL, PZF, PDZ, PHEIGHT, ZDENSITY, ZCDRAG, PU, ZAIRVOL, &
00109             ZSV, ZFORC, PFORC_U, PDFORC_UDU, PFORC_E, PDFORC_EDE )
00110 !
00111 !
00112 !*      2.4    Drag force by ground surface
00113 !              ----------------------------
00114 !
00115 PFORC_U   (:,1) = PUW_GROUND(:) / PDZ(:,1)
00116 PDFORC_UDU(:,1) = PDFORC_UDU(:,1) + PDUWDU_GROUND(:) / PDZ(:,1)
00117 
00118 !-------------------------------------------------------------------------------------
00119 !
00120 !*      3.2    Destruction of TKE due to small-scale motions forced by leaves
00121 !              --------------------------------------------------------------
00122 !
00123 ! from Kanda and Hino (1994)
00124 !
00125 ! Ext = - Cd * e * u  * Sv        trees
00126 !
00127 PFORC_E   (:,:) = PFORC_E    - 2.*PTKE(:,:)*ZFORC(:,:)
00128 PDFORC_EDE(:,:) = PDFORC_EDE - 2.*ZFORC(:,:)
00129 !
00130 IF (LHOOK) CALL DR_HOOK('ISBA_CANOPY',1,ZHOOK_HANDLE)
00131 !-------------------------------------------------------------------------------------
00132 !
00133 END SUBROUTINE ISBA_CANOPY