SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
surface_air_meb.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 surface_air_meb(PZ0, PZ0H, PZ0G, PH_VEG, PLAI, &
7  ptg, ptc, ptv, pvelc, plw, &
8  pdisph, &
9  pragnc, pgvnc, &
10  pustar2, pcd, pch, pri )
11 !
12 ! typical values for nordic forest:
13 ! PZ0 = 0.8 m
14 ! PZ0G = 0.007m
15 ! PH_VEG = 15 m
16 ! PLAI = 5.
17 ! PCHIL = 0.12
18 ! PLW = 0.02 m
19 !
20 !
21 !!**** *SURFACE_AIR_MEB*
22 !!
23 !! PURPOSE
24 !! -------
25 !
26 ! Calculates the aerodynamic resistance (PRAGNC) between the soil and eventually
27 ! understory vegetation and canopy air, based on Choudhury and Monteith (1998)
28 ! and Monteith (1975).
29 ! Modification for free convection based on Sellers et.al (1986), leaf drag
30 ! coefficient according to Sellers et.al. (1996).
31 ! Also calculates the aerodynamic conductance (PGVNC) between the canopy itself
32 ! and canopy air, also based on Choudhury and Monteith (1998), and modified for
33 ! free conveection by Sellers et.al. (1986)
34 ! Only used for double energy balance
35 !
36 !
37 !!** METHOD
38 !! ------
39 !!
40 !! REFERENCE
41 !! ---------
42 !!
43 !!
44 !! AUTHOR
45 !! ------
46 !!
47 !! P. Samuelsson/S.Gollvik * SMHI *
48 !!
49 !! MODIFICATIONS
50 !! -------------
51 !! Original 11/2010
52 !! (A. Boone) 25/06/2014 Use stability fn from ISBA for stable conditions
53 !! (since none existed before). Added to handle extremely
54 !! stable conditions, such as encountered over a snowpack
55 !!
56 !-------------------------------------------------------------------------------
57 !
58 !* 0. DECLARATIONS
59 ! ------------
60 !
61 USE modd_csts, ONLY : xg, xkarman
62 USE modd_surf_atm, ONLY : xrimax
63 !
64 USE yomhook ,ONLY : lhook, dr_hook
65 USE parkind1 ,ONLY : jprb
66 !
67 IMPLICIT NONE
68 !
69 !* 0.1 declarations of arguments
70 !
71 REAL, DIMENSION(:), INTENT(IN) :: pz0, pz0h, pz0g, ph_veg, plai
72 ! PZ0 = roughness length for momentum
73 ! PZ0H = roughness length for heat
74 ! PZ0G = roughness length for soil(understory veg?)/snow
75 ! PH_VEG = height of the vegetation
76 ! PLAI = leaf area index
77 !
78 REAL, DIMENSION(:), INTENT(IN) :: ptg, ptc, ptv, pvelc
79 ! PTG = surface temperature
80 ! PTC = canopy air temperature
81 ! PTV = canopy temperature
82 ! PVELC = wind speed at top of vegetation
83 !
84 REAL, DIMENSION(:), INTENT(IN) :: plw, pdisph
85 ! PLW = leaf width
86 ! PDISPH = displacement height
87 !
88 REAL, DIMENSION(:), INTENT(OUT) :: pragnc, pgvnc
89 ! PRAGNC = aerodynamic resistance between
90 ! soil/snow and canopy air
91 ! PGVNC = aerodynamic conductance between
92 ! the canopy and canopy air
93 !
94 REAL, DIMENSION(:), INTENT(OUT) :: pustar2, pcd, pch, pri
95 ! PUSTAR2 = canopy top friction velocity squared (m2/s2)
96 ! PCD = drag coefficient (-)
97 ! PCH = heat transfor coefficient (ground to canopy air) (-)
98 ! PRI = Richardson number (ground to canopy air) (-)
99 !
100 !
101 !* 0.2 declarations of local variables
102 !
103 !
104 REAL, DIMENSION(SIZE(PTG)) :: zdiffh, zk, zpih, zdifft, zrif, zz0hg, zustar
105 !
106 REAL(KIND=JPRB) :: zhook_handle
107 !
108 !* 0.3 declarations of local parameters
109 !
110 REAL, PARAMETER :: zny = 0.15e-04 !kinematic viscosity for air
111 REAL, PARAMETER :: zalpha = 4. !attenuation coef. for mom.
112  ! ~2 for Wheat, ~4 for coniferous forest
113  ! NOTE Eventually should possibly be made a fn of veg type
114 REAL, PARAMETER :: zalphaprim = 3. !attenuation coef. for wind
115 REAL, PARAMETER :: za = 0.01
116 REAL, PARAMETER :: zrafa = 9. !resistance factor for stability correction
117  !for unstable conditions
118 
119 !-------------------------------------------------------------------------------
120 !-------------------------------------------------------------------------------
121 !
122 !* 0. Initialization:
123 ! ---------------
124 !
125 IF (lhook) CALL dr_hook('SURFACE_AIR_MEB',0,zhook_handle)
126 !
127 pragnc(:) = 0.
128 pgvnc(:) = 0.
129 !
130 zdiffh(:) = max(ph_veg(:)-pdisph(:),0.1)
131 !
132 zk(:) = (xkarman*xkarman)*pvelc(:)*zdiffh(:)/log(zdiffh(:)/pz0(:))
133 !
134 ! Just a diagnostic: Ustar and the equivalent drag coef at the top of the canopy (m/s):
135 !
136 zustar(:) = zk(:)/(xkarman*zdiffh(:))
137 pcd(:) = zustar(:)/max(1.,pvelc(:))
138 pustar2(:) = zustar(:)**2
139 !
140 ! Aerodynamic resistance, Eq. 25 Choudhury and Monteith, 1988:
141 !
142 pragnc(:)=ph_veg(:)*exp(zalpha)/(zalpha*zk(:))*(exp(-zalpha*pz0g(:)/ph_veg(:)) &
143  -exp(-zalpha*(pdisph(:)+pz0(:))/ph_veg(:)))
144 !
145 ! Modify the aerodynamic resistance, with an unstable transfer correction
146 ! Eq. A15, Sellers et.al. 1986 (RI < 0)
147 !
148 ! For stable conditions (RI > 0), use a form which asymptotically approaches 0
149 ! as Ri==>infinty. This is a fairly generic form typical of such curves...
150 ! As we have no predefined stable correction, we use ISBAs
151 ! (see Noilhan and Mahfouf, 1996). This stable correction
152 ! is most critical for snow...BOTH sublimation from ground-based snowpack and
153 ! melt conditions which can be characterized by very
154 ! strong stable conditions, thus a limited, constant value of the turbulent
155 ! exchange can permit very large negative heat fluxes (towards the snow)
156 ! and excessive melt rates ...also excessive sublimation can occur in winter.
157 ! Since the ISBA stability fn has a roughness length factor, we use
158 ! a simple Ri-based weight factor to ensure a continuous transition
159 ! between stability regimes. In the limit as Ri==>Ricrit, the
160 ! transfer function collapses into the ISBA relationship with the full roughness factor.
161 ! Finally, note that we assume the ratio z0/z0h is the same for vegetation and
162 ! underlying surface (as done for composite ISBA).
163 !
164 pri(:) = -xg*ph_veg(:)*(ptg(:)-ptc(:))/(ptg(:)*pvelc(:)*pvelc(:))
165 !
166 zrif(:) = 0.
167 zz0hg(:) = pz0g(:)
168 !
169 WHERE(pri(:) <= 0.) ! Unstable - Sellers
170  zpih(:) = sqrt(1. - zrafa*pri(:))
171 ELSEWHERE ! Stable - Noilhan and Mahfouf
172  zz0hg(:)= pz0g(:)*pz0h(:)/pz0(:)
173  zrif(:) = min(1., pri(:)/xrimax)
174  zpih(:) = (1/(1. + 15*pri(:)*sqrt(1.+5*pri(:))))* &
175  ((1.-zrif(:)) + zrif(:)*(log(zdiffh(:)/pz0g(:))/log(zdiffh(:)/zz0hg(:))) ) ! continuous
176 END WHERE
177 !
178 pragnc(:) = pragnc(:)/zpih(:)
179 !
180 ! Diagnose CH (transfer coefficient: -) just for diagnostic purposes:
181 !
182 pch(:) = 1/(pragnc(:)*max(1., pvelc(:)))
183 !
184 ! Aerodynamic resistance within the canopy layer, i.e. between canopy and canopy air
185 ! Eq. 29 and 30, Choudhury and Monteith, 1988:
186 !
187 pgvnc(:) = (2.*za)*plai(:)/zalphaprim*sqrt(pvelc(:)/plw(:))*(1.-exp(-0.5*zalphaprim))
188 !
189 ! Limit the aerodynamic conductance to a small value
190 !
191 pgvnc(:) = max(1.e-06,pgvnc(:))
192 !
193 ! Free convection correction Eq. A9 Sellers et.al., 1986:
194 !
195 zdifft(:) = max(1.e-06,ptv(:)-ptc(:))
196 zdifft(:) = sqrt(sqrt(zdifft(:)/plw(:)))
197 pgvnc(:) = pgvnc(:)+zdifft(:)*plai(:)/890.
198 !
199 IF (lhook) CALL dr_hook('SURFACE_AIR_MEB',1,zhook_handle)
200 !
201 END SUBROUTINE surface_air_meb
subroutine surface_air_meb(PZ0, PZ0H, PZ0G, PH_VEG, PLAI, PTG, PTC, PTV, PVELC, PLW, PDISPH, PRAGNC, PGVNC, PUSTAR2, PCD, PCH, PRI)