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