SURFEX v8.1
General documentation of Surfex
isba_canopy.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 ! #########
6 SUBROUTINE isba_canopy (PCDRAG, KI, SB, PHEIGHT, PCANOPY_DENSITY, PUW_GROUND, PDUWDU_GROUND, &
7  PFORC_U, PDFORC_UDU, PFORC_E, PDFORC_EDE)
8 ! ###############################################################################
9 !
10 !!**** *ISBA_CANOPY_n * - prepares forcing for canopy air model
11 !!
12 !! PURPOSE
13 !! -------
14 !
15 !!** METHOD
16 !! ------
17 !!
18 !! REFERENCE
19 !! ---------
20 !!
21 !!
22 !! AUTHOR
23 !! ------
24 !! V. Masson
25 !!
26 !! MODIFICATIONS
27 !! -------------
28 !! Original 07/2006
29 !!---------------------------------------------------------------
30 !
31 USE modd_canopy_n, ONLY : canopy_t
32 !
33 USE modd_csts, ONLY : xrd, xcpd, xp00, xg
34 USE modd_surf_par, ONLY : xundef
35 !
36 USE yomhook ,ONLY : lhook, dr_hook
37 USE parkind1 ,ONLY : jprb
38 !
39 USE modi_canopy
40 !
41 IMPLICIT NONE
42 !
43 !* 0.1 declarations of arguments
44 !
45 !
46 REAL, INTENT(IN) :: PCDRAG
47 !
48 INTEGER, INTENT(IN) :: KI ! number of points
49 TYPE(canopy_t), INTENT(INOUT) :: SB
50 REAL, DIMENSION(KI), INTENT(IN) :: PHEIGHT ! canopy height (m)
51 REAL, DIMENSION(KI), INTENT(IN) :: PCANOPY_DENSITY ! canopy density (-)
52 !
53 REAL, DIMENSION(KI), INTENT(IN) :: PUW_GROUND ! friction flux for ground surface (m2/s2)
54 REAL, DIMENSION(KI), INTENT(IN) :: PDUWDU_GROUND ! derivative of ground friction flux (m/s)
55 !
56 REAL, DIMENSION(KI,SB%NLVL), INTENT(OUT) :: PFORC_U ! tendency of wind due to canopy drag (m/s2)
57 REAL, DIMENSION(KI,SB%NLVL), INTENT(OUT) :: PDFORC_UDU! formal derivative of the tendency of
58 ! ! wind due to canopy drag (1/s)
59 REAL, DIMENSION(KI,SB%NLVL), INTENT(OUT) :: PFORC_E ! tendency of TKE due to canopy drag (m2/s3)
60 REAL, DIMENSION(KI,SB%NLVL), INTENT(OUT) :: PDFORC_EDE! formal derivative of the tendency of
61 ! ! TKE due to canopy drag (1/s)
62 !
63 !* 0.2 declarations of local variables
64 !
65 INTEGER :: JLAYER, JJ ! loop counter on canopy heights
66 !
67 REAL, DIMENSION(KI,SB%NLVL) :: ZCDRAG ! drag coefficient in canopy
68 REAL, DIMENSION(KI,SB%NLVL) :: ZDENSITY ! vegetation density for each canopy level
69 REAL, DIMENSION(KI,SB%NLVL) :: ZSV ! vertical surface for each canopy level
70 REAL, DIMENSION(KI,SB%NLVL) :: ZFORC
71 REAL, DIMENSION(KI,SB%NLVL) :: ZAIRVOL ! Fraction of air for each canopy level total volume
72 REAL(KIND=JPRB) :: ZHOOK_HANDLE
73 !
74 !-------------------------------------------------------------------------------------
75 !
76 !* 1. Computations of canopy grid characteristics
77 ! -------------------------------------------
78 !
79 !
80 !* 1.1 Proportion of leaves for each canopy level
81 ! (parabolic shape, maximum at mid canopy height, with the same
82 ! total LAI on the canopy)
83 !
84 IF (lhook) CALL dr_hook('ISBA_CANOPY',0,zhook_handle)
85 zdensity(:,:) = 0.
86 DO jlayer = 1,sb%NLVL
87  DO jj = 1,ki
88  IF (pheight(jj)>0.) THEN
89  zdensity(jj,jlayer) = 1.5 * &
90  max(pcanopy_density(jj)*4.*sb%XZ(jj,jlayer)*(pheight(jj)-sb%XZ(jj,jlayer))/pheight(jj)**2, 0.)
91  ENDIF
92  ENDDO
93 END DO
94 !
95 !* 2.1 Drag coefficient by vegetation (Patton et al 2001)
96 ! ------------------------------
97 !
98 zcdrag(:,:) = pcdrag
99 !
100 !* 1.4 No building volume
101 !
102 ! * in order to take into account building volume, further developments must be
103 ! done in the atmospheric model.
104 ! If these changes are not done, to take into account building volume in the
105 ! present routine alone would not be energetically coeherent (there would be
106 ! too much energy release for heat and vapor or consumed for wind).
107 !
108 zairvol(:,:) = 1.
109 !
110 !* 1.2 Discretization on each canopy level
111 !
112  CALL canopy(ki, sb, pheight, zdensity, zcdrag, zairvol, zsv, &
113  zforc, pforc_u, pdforc_udu, pforc_e, pdforc_ede )
114 !
115 !
116 !* 2.4 Drag force by ground surface
117 ! ----------------------------
118 !
119 pforc_u(:,1) = puw_ground(:) / sb%XDZ(:,1)
120 pdforc_udu(:,1) = pdforc_udu(:,1) + pduwdu_ground(:) / sb%XDZ(:,1)
121 
122 !-------------------------------------------------------------------------------------
123 !
124 !* 3.2 Destruction of TKE due to small-scale motions forced by leaves
125 ! --------------------------------------------------------------
126 !
127 ! from Kanda and Hino (1994)
128 !
129 ! Ext = - Cd * e * u * Sv trees
130 !
131 pforc_e(:,:) = pforc_e - 2.*sb%XTKE(:,:)*zforc(:,:)
132 pdforc_ede(:,:) = pdforc_ede - 2.*zforc(:,:)
133 !
134 IF (lhook) CALL dr_hook('ISBA_CANOPY',1,zhook_handle)
135 !-------------------------------------------------------------------------------------
136 !
137 END SUBROUTINE isba_canopy
real, save xcpd
Definition: modd_csts.F90:63
real, parameter xundef
real, save xrd
Definition: modd_csts.F90:62
real, save xg
Definition: modd_csts.F90:55
integer, parameter jprb
Definition: parkind1.F90:32
logical lhook
Definition: yomhook.F90:15
subroutine isba_canopy(PCDRAG, KI, SB, PHEIGHT, PCANOPY_DENSITY, PUW_GROUND, PDUWDU_GROUND, PFORC_U, PDFORC_UDU, PFORC_E, PDFORC_EDE)
Definition: isba_canopy.F90:8
real, save xp00
Definition: modd_csts.F90:57
subroutine canopy(KI, SB, PHEIGHT, PDENSITY, PCDRAG, PAIRVOL, PSV, PFORC, PFORC_U, PDFORC_UDU, PFORC_E, PDFORC_EDE)
Definition: canopy.F90:8