SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
soilstress.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 soilstress( HISBA, PF2, &
7  prootfrac, pwsat, pwfc, pwwilt, &
8  pwg, pwgi, kwg_layer, pf2wght, pf5 )
9 ! ####################################################################
10 !
11 !!**** *SOILSTRESS*
12 !!
13 !! PURPOSE
14 !! -------
15 !
16 ! Calculates the vegetation stress due to soil water
17 !
18 !
19 !!** METHOD
20 !! ------
21 !
22 ! Calculates the F2 coefficient.
23 !
24 !
25 !! EXTERNAL
26 !! --------
27 !!
28 !! none
29 !!
30 !! IMPLICIT ARGUMENTS
31 !! ------------------
32 !!
33 !! none
34 !!
35 !!
36 !! REFERENCE
37 !! ---------
38 !!
39 !! Noilhan and Planton (1989)
40 !! Belair (1995)
41 !!
42 !! AUTHOR
43 !! ------
44 !!
45 !! S. Belair * Meteo-France *
46 !!
47 !! MODIFICATIONS
48 !! -------------
49 !! Original 13/03/95
50 !! (P.Jabouille) 13/11/96 mininum value for ZF1
51 !! (V. Masson) 28/08/98 add PF2 for Calvet (1998) CO2 computations
52 !! (B. Decharme) 07/15 Suppress numerical adjustement for PF2
53 !-------------------------------------------------------------------------------
54 !
55 !* 0. DECLARATIONS
56 ! ------------
57 !
58 !
59 USE modd_isba_par, ONLY : xdenom_min
60 !
61 USE yomhook ,ONLY : lhook, dr_hook
62 USE parkind1 ,ONLY : jprb
63 !
64 IMPLICIT NONE
65 !
66 !* 0.1 declarations of arguments
67 !
68 !
69  CHARACTER(LEN=*), INTENT(IN) :: hisba ! type of soil (Force-Restore OR Diffusion)
70 ! ! '2-L'
71 ! ! '3-L'
72 ! ! 'DIF' ISBA-DF
73 !
74 REAL, DIMENSION(:,:), INTENT(IN) :: prootfrac, pwsat, pwfc, pwwilt, &
75  pwg, pwgi
76 ! PROOTFRAC = cumulative root fraction (-)
77 ! PWFC = field capacity profile (m3/m3)
78 ! PWWILT = wilting point profile (m3/m3)
79 ! PWSAT = porosity profile (m3/m3)
80 ! PWG = soil liquid volumetric water content (m3/m3)
81 ! PWGI = soil frozen volumetric water content (m3/m3)
82 !
83 INTEGER, DIMENSION(:), INTENT(IN) :: kwg_layer
84 ! KWG_LAYER = Number of soil moisture layers (DIF option)
85 !
86 REAL, DIMENSION(:), INTENT(OUT) :: pf2 ! water stress coefficient
87 !
88 REAL, DIMENSION(:), INTENT(OUT) :: pf5 ! water stress coefficient for Hv (based on F2):
89 ! ! Verify that Etv=>0 as F2=>0
90 !
91 REAL, DIMENSION(:,:), INTENT(OUT):: pf2wght ! water stress coefficient profile (ISBA-DF)
92 !
93 !
94 !* 0.2 declarations of local variables
95 !
96 !
97 REAL, DIMENSION(SIZE(PWFC,1)) :: zwfc_avgz, zwsat_avgz, zwwilt_avgz
98 ! ZWFC_AVGZ = field capacity averaged over entire soil column
99 ! ZWSAT_AVGZ = porosity averaged over entire soil column
100 ! ZWWILT_AVGZ = wilting point averaged over entire soil column
101 !
102 ! ISBA-DF:
103 !
104 REAL, DIMENSION(SIZE(PWG,1)) :: zwsat, zwfc, zwwilt,zf2wght
105 ! ZWSAT = ice-adjusted porosity profile (m3/m3)
106 ! ZWFC = ice-adjusted field capacity profile (m3/m3)
107 ! ZWWILT = ice-adjusted wilting point profile (m3/m3)
108 !
109 REAL :: zrootfracn
110 ! ZROOTFRACN = Normalized root fraction weights
111 !
112 INTEGER :: ini, inl, jj, jl, idepth
113 !
114 !
115 !* 0.3 declarations of local parameters:
116 !
117 REAL(KIND=JPRB) :: zhook_handle
118 !
119 !-------------------------------------------------------------------------------
120 !
121 !* 0. Initialization of variables:
122 ! ----------------------------
123 !
124 IF (lhook) CALL dr_hook('SOILSTRESS',0,zhook_handle)
125 !
126 ini=SIZE(pwg,1)
127 inl=maxval(kwg_layer(:))
128 !
129 pf2(:) = 0.0
130 pf2wght(:,:) = 0.0
131 !
132 zwfc_avgz(:) = 0.
133 zwsat_avgz(:) = 0.
134 zwwilt_avgz(:) = 0.
135 !
136 zf2wght(:) = 0.
137 !
138 !-------------------------------------------------------------------------------
139 !
140 !* 2. THE 'PF2' FACTOR
141 ! ----------------
142 ! This factor takes into account the effect
143 ! of the water stress on the surface
144 ! resistance
145 !
146 ! - For humid soils (> WFC), this factor does not
147 ! increase the stomatal resistance
148 ! - The stomatal resistance should be large
149 ! when the soil is very dry (< WILT)
150 !
151 IF(hisba =='DIF')THEN
152 !
153 ! If using the diffusion option, then calculate transpiration weights
154 ! and the mean root-zone soil water stress factor F2:
155 !
156 !---------------------------------------------------------
157 ! First layer
158 !---------------------------------------------------------
159 !
160 ! Due to the presence of ice, modify soil parameters:
161  zwsat(:) = pwsat(:,1) - pwgi(:,1)
162  zwfc(:) = pwfc(:,1) * zwsat(:)/pwsat(:,1)
163  zwwilt(:) = pwwilt(:,1) * zwsat(:)/pwsat(:,1)
164 !
165 ! Calculate the soil water stress factor for each layer:
166  pf2wght(:,1) = max(xdenom_min,min(1.0,(pwg(:,1)-zwwilt(:))/(zwfc(:)-zwwilt(:))))
167  zf2wght(:) = max( 0.0,min(1.0,(pwg(:,1)-zwwilt(:))/(zwfc(:)-zwwilt(:))))
168 !
169 ! Normalize the transpiration weights by root fraction:
170  pf2wght(:,1) = prootfrac(:,1)*pf2wght(:,1)
171  zf2wght(:) = prootfrac(:,1)*zf2wght(:)
172 !
173 ! Net soil water stress for entire root zone:
174  pf2(:) = zf2wght(:)
175 !
176 !---------------------------------------------------------
177 ! Other layers
178 !---------------------------------------------------------
179 !
180  DO jl=2,inl
181  DO jj=1,ini
182 !
183  idepth=kwg_layer(jj)
184  IF(jl<=idepth)THEN
185 !
186 ! Due to the presence of ice, modify soil parameters:
187  zwsat(jj) = pwsat(jj,jl) - pwgi(jj,jl)
188  zwfc(jj) = pwfc(jj,jl) * zwsat(jj)/pwsat(jj,jl)
189  zwwilt(jj) = pwwilt(jj,jl) * zwsat(jj)/pwsat(jj,jl)
190 !
191 ! Calculate normalized root fraction weights:
192  zrootfracn = prootfrac(jj,jl) - prootfrac(jj,jl-1)
193 !
194 ! Calculate the soil water stress factor for each layer:
195 !! PF2WGHT(JJ,JL) = MAX(0.0,MIN(1.0,(PWG(JJ,JL)-ZWWILT(JJ))/(ZWFC(JJ)-ZWWILT(JJ))))
196 
197  pf2wght(jj,jl) = max(xdenom_min,min(1.0,(pwg(jj,jl)-zwwilt(jj))/(zwfc(jj)-zwwilt(jj))))
198  zf2wght(jj) = max( 0.0,min(1.0,(pwg(jj,jl)-zwwilt(jj))/(zwfc(jj)-zwwilt(jj))))
199 !
200 ! Normalize the transpiration weights by root fraction:
201  pf2wght(jj,jl) = zrootfracn*pf2wght(jj,jl)
202  zf2wght(jj) = zrootfracn*zf2wght(jj)
203 !
204 ! Net soil water stress for entire root zone:
205  pf2(jj) = pf2(jj) + zf2wght(jj)
206 !
207  ENDIF
208 !
209  ENDDO
210  ENDDO
211 !
212 ELSE
213 !
214 ! When using the Force-Restore (FR) soil option, the soil properties
215 ! are assumed to be homogeneous in the vertical. Therefore, simply
216 ! use the properties for the uppermost soil layer when defining
217 ! soil properties for local computations.
218 !
219 ! Due to the presence of ice, modify soil parameters:
220 !
221  zwsat_avgz(:) = pwsat(:,1) - pwgi(:,2)
222  zwfc_avgz(:) = pwfc(:,1)*zwsat_avgz(:)/pwsat(:,1)
223  zwwilt_avgz(:) = pwwilt(:,1)*zwsat_avgz(:)/pwsat(:,1)
224 !
225 ! Compute the water stress factor:
226 !
227  pf2(:) = (pwg(:,2)-zwwilt_avgz(:))/(zwfc_avgz(:)-zwwilt_avgz(:))
228  pf2(:) = max(0.0,min(1.0, pf2(:)))
229 !
230 !
231 ENDIF
232 !
233 ! Function to cause Etv to approach 0 as F2 goes to 0:
234 !
235 pf5(:) = pf2(:)
236 !
237 IF (lhook) CALL dr_hook('SOILSTRESS',1,zhook_handle)
238 !
239 !-------------------------------------------------------------------------------
240 !
241 END SUBROUTINE soilstress
subroutine soilstress(HISBA, PF2, PROOTFRAC, PWSAT, PWFC, PWWILT, PWG, PWGI, KWG_LAYER, PF2WGHT, PF5)
Definition: soilstress.F90:6