SURFEX v7.3
General documentation of Surfex
|
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