SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/canopy.F90
Go to the documentation of this file.
00001 !     #########
00002 SUBROUTINE CANOPY(KI, KLVL, PZF, PDZ, PHEIGHT, PDENSITY, PCDRAG, PU, PAIRVOL, &
00003                   PSV, PFORC, PFORC_U, PDFORC_UDU, PFORC_E, PDFORC_EDE   )  
00004 !     ###############################################################################
00005 !
00006 !!****  *ISBA_CANOPY_n * - prepares forcing for canopy air model
00007 !!
00008 !!    PURPOSE
00009 !!    -------
00010 !
00011 !!**  METHOD
00012 !!    ------
00013 !!
00014 !!    REFERENCE
00015 !!    ---------
00016 !!      
00017 !!
00018 !!    AUTHOR
00019 !!    ------
00020 !!     V. Masson 
00021 !!
00022 !!    MODIFICATIONS
00023 !!    -------------
00024 !!      Original    07/2006
00025 !!---------------------------------------------------------------
00026 !
00027 !
00028 USE MODD_CSTS,         ONLY : XRD, XCPD, XP00, XG
00029 USE MODD_SURF_PAR,     ONLY : XUNDEF
00030 !
00031 !
00032 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00033 USE PARKIND1  ,ONLY : JPRB
00034 !
00035 IMPLICIT NONE
00036 !
00037 !*      0.1    declarations of arguments
00038 !
00039 INTEGER,                  INTENT(IN)    :: KI        ! number of points
00040 INTEGER,                  INTENT(IN)    :: KLVL      ! number of levels in canopy
00041 REAL, DIMENSION(KI,KLVL), INTENT(IN)    :: PZF       ! heights of bottom of canopy levels    (m)
00042 REAL, DIMENSION(KI,KLVL), INTENT(IN)    :: PDZ       ! depth   of canopy levels              (m)
00043 REAL, DIMENSION(KI), INTENT(IN)    :: PHEIGHT   ! canopy height                       (m)
00044 REAL, DIMENSION(KI,KLVL), INTENT(IN)    :: PDENSITY  ! canopy density                  (-)
00045 REAL, DIMENSION(KI,KLVL), INTENT(IN)    :: PCDRAG
00046 !
00047 REAL, DIMENSION(KI,KLVL), INTENT(IN)    :: PU        ! wind for each canopy layer            (m/s)
00048 !
00049 REAL, DIMENSION(KI,KLVL), INTENT(IN)    :: PAIRVOL   ! Fraction of air for each canopy level total volume
00050 !
00051 REAL, DIMENSION(KI,KLVL), INTENT(OUT)   :: PSV       ! vertical surface of building
00052                                                      ! (walls) for each canopy level
00053 REAL, DIMENSION(KI,KLVL), INTENT(OUT)   :: PFORC     !
00054 !
00055 REAL, DIMENSION(KI,KLVL), INTENT(OUT)   :: PFORC_U   ! tendency of wind due to canopy drag   (m/s2)
00056 REAL, DIMENSION(KI,KLVL), INTENT(OUT)   :: PDFORC_UDU! formal derivative of the tendency of
00057 !                                                    ! wind due to canopy drag               (1/s)
00058 REAL, DIMENSION(KI,KLVL), INTENT(OUT)   :: PFORC_E   ! tendency of TKE  due to canopy drag   (m2/s3)
00059 REAL, DIMENSION(KI,KLVL), INTENT(OUT)   :: PDFORC_EDE! formal derivative of the tendency of
00060 !                                                    ! TKE  due to canopy drag               (1/s)
00061 !
00062 !*      0.2    declarations of local variables
00063 !
00064 INTEGER                  :: JLAYER    ! loop counter on canopy heights      
00065 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00066 !
00067 !-------------------------------------------------------------------------------------
00068 !
00069 IF (LHOOK) CALL DR_HOOK('CANOPY',0,ZHOOK_HANDLE)
00070 !
00071 !*      1.     Computations of canopy grid characteristics
00072 !              -------------------------------------------
00073 !
00074 !
00075 !*      1.2    Discretization on each canopy level
00076 !
00077 PSV(:,:) = 0.
00078 DO JLAYER = 1,KLVL-1
00079   !
00080   WHERE ( PZF(:,JLAYER) < PHEIGHT(:) )
00081     PSV(:,JLAYER) = PDENSITY(:,JLAYER) / PHEIGHT(:)
00082     WHERE ( PZF(:,JLAYER+1) > PHEIGHT(:) )
00083       PSV(:,JLAYER) = PSV(:,JLAYER) * ( PHEIGHT(:) - PZF(:,JLAYER) )
00084     ELSEWHERE
00085       PSV(:,JLAYER) = PSV(:,JLAYER) *  PDZ(:,JLAYER)
00086     END WHERE
00087   END WHERE
00088   !
00089 END DO
00090 !
00091 PFORC(:,:) = PCDRAG(:,:) * PU(:,:) * PSV(:,:)/PAIRVOL(:,:)/PDZ(:,:)
00092 !
00093 !-------------------------------------------------------------------------------------
00094 !
00095 !*      2.     Computations of wind tendency due to canopy drag
00096 !              ------------------------------------------------
00097 !
00098 PFORC_U    = 0.
00099 PDFORC_UDU = 0.
00100 !
00101 ! Ext = - Cdrag  * u- * u- * Sv       tree canopy drag
00102 !       - u'w'(ground)     * Sh       horizontal surfaces (ground)
00103 !
00104 !
00105 !*      2.2    Drag force by wall surfaces
00106 !              ---------------------------
00107 !
00108 !* drag force by vertical surfaces
00109 !
00110 PFORC_U   (:,:) = PFORC_U    -      PFORC(:,:) * PU(:,:)
00111 PDFORC_UDU(:,:) = PDFORC_UDU - 2. * PFORC(:,:)
00112 !
00113 !-------------------------------------------------------------------------------------
00114 !
00115 !*      3.     Computations of TKE  tendency due to canopy drag
00116 !              ------------------------------------------------
00117 !
00118 !* Tendency due to drag for TKE
00119 !
00120 PFORC_E   (:,:) = 0.
00121 PDFORC_EDE(:,:) = 0.
00122 !
00123 !*      3.1    Creation of TKE by wake
00124 !              -----------------------
00125 !
00126 ! from Kanda and Hino (1994)
00127 !
00128 ! Ext = + Cd * u+^3  * Sv/Vair        vertical surfaces or trees
00129 !
00130 ! with Vair = Vair/Vtot * Vtot = (Vair/Vtot) * Stot * Dz
00131 ! and  Sv/Vair = (Sv/Stot) * Stot/Vair = (Sv/Stot) / (Vair/Vtot) / Dz
00132 !
00133 PFORC_E    = PFORC_E    + PFORC(:,:) * PU(:,:)**2
00134 PDFORC_EDE = PDFORC_EDE + 0.
00135 !
00136 !
00137 IF (LHOOK) CALL DR_HOOK('CANOPY',1,ZHOOK_HANDLE)
00138 !
00139 !-------------------------------------------------------------------------------------
00140 !
00141 END SUBROUTINE CANOPY