SURFEX v8.1
General documentation of Surfex
ice_soilfr.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  SUBROUTINE ice_soilfr(IO, KK, PK, PEK, DMK, PTSTEP, PKSFC_IVEG, PDWGI1, PDWGI2 )
6 !! ##########################################################################
7 !
8 !!**** *ICE_SOILFR*
9 !!
10 !! PURPOSE
11 !! -------
12 !
13 ! In ISBA-FR: calculates the
14 ! 1.) evolution of the surface and deep-soil temperature(s)
15 ! (i.e., Ts and T2 if Force-Restore, TN if DIFfusion) due to soil water
16 ! phase changes
17 !
18 !!** METHOD
19 !! ------
20 !
21 ! - latent heating from soil ice phase changes
22 !
23 !! EXTERNAL
24 !! --------
25 !!
26 !! none
27 !!
28 !! IMPLICIT ARGUMENTS
29 !! ------------------
30 !!
31 !!
32 !! REFERENCE
33 !! ---------
34 !!
35 !! Noilhan and Planton (1989)
36 !! Belair (1995)
37 !! Boone et al. (2000)
38 !!
39 !! AUTHOR
40 !! ------
41 !!
42 !! A. Boone * Meteo-France *
43 !! B. Decharme * Meteo-France *
44 !!
45 !! MODIFICATIONS
46 !! -------------
47 !! Original 14/03/95
48 !! (A.Boone) 08/11/00 soil ice phase changes herein
49 !! (A.Boone) 06/05/02 Updates, ordering. Addition of 'IO%CSOILFRZ' option
50 !! (B. Decharme) 03/2009 BUG : effect of insolation due to vegetation cover
51 !! at 1 for bare soil
52 !! (B. Decharme) 07/2012 Time spliting for soil ice
53 !! (A.Boone) 02/2013 Split from isba_fluxes.F90
54 !-------------------------------------------------------------------------------
55 !
56 !* 0. DECLARATIONS
57 ! ------------
58 !
62 !
63 USE modd_csts, ONLY : xcl, xtt, xpi, xday, xci, xrholi, &
65 USE modd_surf_par, ONLY : xundef
66 USE modd_isba_par, ONLY : xwgmin, xsphsoil, xdrywght
67 !
68 USE yomhook ,ONLY : lhook, dr_hook
69 USE parkind1 ,ONLY : jprb
70 !
71 IMPLICIT NONE
72 !
73 !* 0.1 declarations of arguments
74 !
75 TYPE(isba_options_t), INTENT(INOUT) :: IO
76 TYPE(isba_k_t), INTENT(INOUT) :: KK
77 TYPE(isba_p_t), INTENT(INOUT) :: PK
78 TYPE(isba_pe_t), INTENT(INOUT) :: PEK
79 TYPE(diag_misc_isba_t), INTENT(INOUT) :: DMK
80 !
81 REAL, INTENT (IN) :: PTSTEP ! model time step (s)
82 !
83 REAL, DIMENSION(:), INTENT(IN) :: PKSFC_IVEG
84 ! PKSFC_IVEG= non-dimensional vegetation insolation coefficient
85 !
86 REAL, DIMENSION(:), INTENT(OUT) :: PDWGI1, PDWGI2
87 ! PDWGI1 = near-surface liquid water equivalent
88 ! volumetric ice content tendency
89 ! PDWGI2 = deep ground liquid water equivalent
90 ! volumetric ice content tendency
91 !
92 !* 0.2 declarations of local variables
93 !
94 REAL :: ZKSOIL ! coefficient for soil freeze/thaw
95 !
96 REAL, DIMENSION(SIZE(DMK%XCG)) :: ZKSFC_FRZ, ZFREEZING, ZICE_MELT, ZWIM, &
97  ZWIT, ZWGI1, ZWGI2, ZWM, ZSOILHEATCAP, &
98  ZICEEFF, ZEFFIC, ZTAUICE, &
99  ZWGMIN, ZTGMAX, ZMATPOT, ZDELTAT
100 ! ZKSFC_FRZ = surface insolation coefficient (kg m-2 K-1)
101 ! ZFREEZING = rate for freezing soil water (kg m-2)
102 ! ZICE_MELT = rate for melting soil ice (kg m-2)
103 ! ZWIM,ZWIT = available ice content (m3 m-3)
104 ! ZWGI1,ZWGI2 = volumetric ice contents (m3 m-3)
105 ! ZWM = available liquid water content (m3 m-3)
106 ! ZSOILHEATCAP = soil heat capacity (J m-3 K-1)
107 ! ZICEEFF = effective soil ice penetration depth (m)
108 ! ZEFFIC = phase change efficiency
109 ! ZMATPOT = soil matric potential (m)
110 ! ZWGMIN = volumetric water content above which soil water can
111 ! be unfrozen (if energy and mass available)(m3 m-3)
112 ! ZTGMAX = temperature below which liquid water
113 ! can be frozen (if energy and mass available)(K)
114 ! ZDELTAT = Freezing or melting temperature depression (K) after
115 ! possible flux correction
116 !
117 REAL, DIMENSION(SIZE(DMK%XCG)) :: ZWSAT_AVGZ
118 ! ZWSAT_AVGZ = soil column average porosity (m3 m-3)
119 !
120 REAL, DIMENSION(SIZE(DMK%XCG)) :: ZPSNG
121 ! ZPSNG = snow fractions corresponding to
122 ! dummy argument PEK%XPSNG(:)
123 ! if PEK%TSNOW%SCHEME = 'DEF' (composite
124 ! or Force-Restore snow scheme), else
125 ! they are zero for explicit snow case
126 ! as snow fluxes calculated outside of
127 ! this routine using the
128 ! PEK%TSNOW%SCHEME = '3-L' or 'CRO' option.
129 !
130 !* 0.3 declarations of local parameters
131 !
132 REAL, PARAMETER :: ZINSOLFRZ_VEG = 0.20 ! (-) Vegetation insolation coefficient
133 !
134 REAL, PARAMETER :: ZINSOLFRZ_LAI = 30.0 ! (m2 m-2) Vegetation insolation coefficient
135 !
136 REAL, PARAMETER :: ZEFFIC_MIN = 0.01 ! (-) (0 <= ZEFFIC_MIN << 1)
137 ! This parameter ensures
138 ! a small minimum melt or freeze efficiency...
139 ! It is numerical. When it is small, it has
140 ! a only small impact on results, except
141 ! that it keeps very small values of ice from persisting
142 ! over long periods of time as they approach zero.
143 ! If it is zero, then this effect off.
144 !
145 !
146 INTEGER :: INJ, JJ
147 !
148 REAL, DIMENSION(SIZE(DMK%XCG)) :: ZWORK1, ZWORK2, ZTDIURN
149 !
150 REAL(KIND=JPRB) :: ZHOOK_HANDLE
151 !-------------------------------------------------------------------------------
152 !
153 !* 0. Initialization
154 ! --------------
155 IF (lhook) CALL dr_hook('ICE_SOILFR',0,zhook_handle)
156 !
157 zfreezing(:) = 0.0
158 zksfc_frz(:) = 0.0
159 zeffic(:) = 0.0
160 zice_melt(:) = 0.0
161 zwgi1(:) = 0.0
162 zwim(:) = 0.0
163 zsoilheatcap(:) = 0.0
164 zwit(:) = 0.0
165 zwgi2(:) = 0.0
166 ztgmax(:) = 0.0
167 zwgmin(:) = 0.0
168 zmatpot(:) = 0.0
169 zwsat_avgz(:) = xundef
170 zdeltat(:) = 0.0
171 ztdiurn(:) = 0.0
172 !
173 inj = SIZE(pek%XTG,1)
174 !
175 !-------------------------------------------------------------------------------
176 !
177 ! If ISBA-ES option in use, then snow covered surface
178 ! fluxes calculated outside of this routine, so set
179 ! the local snow fractions here to zero:
180 !
181 IF(pek%TSNOW%SCHEME == '3-L' .OR. pek%TSNOW%SCHEME == 'CRO')THEN
182  zpsng(:) = 0.0
183 ELSE
184  zpsng(:) = pek%XPSNG(:)+kk%XFFG(:)
185 ENDIF
186 !
187 !* 1. Melting/freezing normalized coefficient
188 ! ---------------------------------------
189 !
190 zksoil = (0.5 * sqrt(xcondi*xci*xrholi*xday/xpi))/xlmtt
191 !
192 ztauice(:) = max(ptstep,pk%XTAUICE(:))
193 !
194 DO jj=1,inj
195 !-------------------------------------------------------------------------------
196 !* 2. EFFECT OF THE MELTING/FREEZING
197 ! ON THE SURFACE-SOIL HEAT AND ICE CONTENTS
198 ! ('DEF' or Force-Restore soil option)
199 ! -----------------------------------------
200 !
201 ! 2.0 Average soil-column porosity
202 ! ----------------------------
203 ! if Force-Restore option in use, then vertical
204 ! profiles of soil hydrological parameters are constant,
205 ! so use the values in uppermost element (arbitrary)
206 !
207  zwsat_avgz(jj) = kk%XWSAT(jj,1)
208 !
209 ! Influence of vegetation insolation on surface:
210 !
211  zksfc_frz(jj) = zksoil * pksfc_iveg(jj)
212 !
213 ENDDO
214 !* 2.2 Water freezing
215 ! --------------
216 !
217 IF(io%CSOILFRZ == 'LWT')THEN
218 !
219 ! use option to control phase changes based on a relationship
220 ! between the unfrozen liquid water content and temperature.
221 ! Uses the Clapp and Hornberger model for water potential.
222 ! The energy-limit method used by Boone et al. 2000 and
223 ! Giard and Bazile (2000) is the default.
224 !
225  DO jj=1,inj
226  zmatpot(jj) = min(kk%XMPOTSAT(jj,1), xlmtt*(pek%XTG(jj,1)-xtt)/(xg*pek%XTG(jj,1)) )
227  zwgmin(jj) = zwsat_avgz(jj)*( (zmatpot(jj)/kk%XMPOTSAT(jj,1))**(-1./kk%XBCOEF(jj,1)) )
228 
229  zmatpot(jj) = kk%XMPOTSAT(jj,1)*( (pek%XWG(jj,1)/zwsat_avgz(jj))**(-kk%XBCOEF(jj,1)) )
230  ztgmax(jj) = xlmtt*xtt/(xlmtt - xg* zmatpot(jj))
231  ENDDO
232 ELSE
233  zwgmin(:) = xwgmin
234  ztgmax(:) = xtt
235 ENDIF
236 !
237 DO jj=1,inj
238 !
239  zdeltat(jj) = pek%XTG(jj,1) - ztgmax(jj) ! initial temperature depression
240 !
241  zwork2(jj) = xrholw*pk%XDG(jj,1)
242  zeffic(jj) = max(zeffic_min,(pek%XWG(jj,1)-xwgmin)/zwsat_avgz(jj))
243  zfreezing(jj) = min( max(0.0,pek%XWG(jj,1)-zwgmin(jj))*zwork2(jj), &
244  zksfc_frz(jj)*zeffic(jj)*max( -zdeltat(jj), 0.) )
245 !
246 !* 2.3 Ground Ice melt
247 ! ---------------
248 !
249  zeffic(jj) = max(zeffic_min,pek%XWGI(jj,1)/(zwsat_avgz(jj)-xwgmin))
250  zice_melt(jj) = min( pek%XWGI(jj,1)*zwork2(jj), &
251  zksfc_frz(jj)*zeffic(jj)*max( zdeltat(jj), 0. ) )
252 !
253 !* 2.4 Ice reservoir evolution
254 ! -----------------------
255 !
256 ! Melting of ice/freezing of water:
257 !
258  zwgi1(jj) = pek%XWGI(jj,1) + (ptstep/ztauice(jj))*(1.0-zpsng(jj))* &
259  (zfreezing(jj) - zice_melt(jj))/zwork2(jj)
260 !
261 !
262  zwgi1(jj) = max( zwgi1(jj) , 0. )
263  zwgi1(jj) = min( zwgi1(jj) , zwsat_avgz(jj)-xwgmin)
264 !
265 ! Time tendency:
266 !
267  pdwgi1(jj) = zwgi1(jj) - pek%XWGI(jj,1)
268 !
269 !
270 !* 2.5 Effect on temperature
271 ! ---------------------
272 !
273  pek%XTG(jj,1) = pek%XTG(jj,1) + pdwgi1(jj)*xlmtt*dmk%XCT(jj)*zwork2(jj)
274 !
275 !-------------------------------------------------------------------------------
276 !
277 !* 3. EFFECT OF THE MELTING/FREEZING
278 ! ON THE DEEP-SOIL HEAT AND ICE CONTENTS
279 ! ('DEF' or Force-Restore soil option)
280 ! --------------------------------------
281 !
282  zwork1(jj) = pk%XDG(jj,1)/pk%XDG(jj,2)
283 !* 3.1 Available Deep ice content
284 ! --------------------------
285 !
286  zwim(jj) = ( pek%XWGI(jj,2) - zwork1(jj) * pek%XWGI(jj,1) ) / ( 1. - zwork1(jj) )
287 !
288  zwim(jj) = max(0.,zwim(jj)) ! Just in case of round-off errors
289 !
290 !* 3.2 Deep liquid water content
291 ! -------------------------
292 !
293  zwm(jj) = ( pek%XWG(jj,2) - zwork1(jj) * pek%XWG(jj,1) ) / ( 1. - zwork1(jj) )
294 !
295 !* 3.3 Water freezing
296 ! --------------
297 !
298 ! Total soil volumetric heat capacity [J/(m3 K)]:
299 !
300  zsoilheatcap(jj) = xcl*xrholw*pek%XWG(jj,2) + &
301  xci*xrholi*pek%XWGI(jj,2) + &
302  xsphsoil*xdrywght*(1.0-zwsat_avgz(jj))*(1.0-zwsat_avgz(jj))
303 !
304 ! Soil thickness which corresponds to T2 (m): 2 times the diurnal
305 ! surface temperature wave penetration depth as T2 is the average
306 ! temperature for this layer:
307 !
308  ztdiurn(jj) = min(pk%XDG(jj,2), 4./(zsoilheatcap(jj)*dmk%XCG(jj)))
309 !
310 ! Effective soil ice penetration depth (m):
311 !
312  ziceeff(jj) = (pek%XWGI(jj,2)/(pek%XWGI(jj,2)+pek%XWG(jj,2)))*pk%XDG(jj,2)
313 !
314 ENDDO
315 !
316 IF(io%CSOILFRZ == 'LWT')THEN
317 !
318 ! as for the surface layer (above)JJ
319 ! Note also that if the 'DIF'
320 ! soil option is not in force, then the soil parameters are assumed
321 ! to be homogeneous (in the verticalJJ thus we use 1st element of 2nd dimension
322 ! of the 2D-soil parameter arrays).
323 !
324  DO jj=1,inj
325 
326  zmatpot(jj) = min(kk%XMPOTSAT(jj,1), xlmtt*(pek%XTG(jj,2)-xtt)/(xg*pek%XTG(jj,2)) )
327  zwgmin(jj) = zwsat_avgz(jj)*( (zmatpot(jj)/kk%XMPOTSAT(jj,1))**(-1./kk%XBCOEF(jj,1)) )
328 
329  zmatpot(jj) = kk%XMPOTSAT(jj,1)*( (pek%XWG(jj,2)/zwsat_avgz(jj))**(-kk%XBCOEF(jj,1)) )
330  ztgmax(jj) = xlmtt*xtt/(xlmtt - xg* zmatpot(jj))
331  ENDDO
332 ELSE
333  zwgmin(:) = xwgmin
334  ztgmax(:) = xtt
335 ENDIF
336 !
337 ! Allow freezing by T2 up to a certain depth so that
338 ! T2 energy can not be used to freeze soil water
339 ! at levels sufficiently deep in the soil.
340 !
341 DO jj=1,inj
342 !
343  zdeltat(jj) = pek%XTG(jj,2) - ztgmax(jj) ! initial temperature depression
344 !
345  zwork1(jj) = pk%XDG(jj,1)/pk%XDG(jj,2)
346  zwork2(jj) = xrholw*(pk%XDG(jj,2)-pk%XDG(jj,1))
347 
348  zfreezing(jj) = 0.0
349  IF (ziceeff(jj) <= ztdiurn(jj)) THEN
350 !
351  zeffic(jj) = max(zeffic_min, max(0.0,zwm(jj) - xwgmin)/zwsat_avgz(jj))
352  zfreezing(jj) = min( max(0.0, zwm(jj) - zwgmin(jj))* zwork2(jj), &
353  zksoil*zeffic(jj)*max( -zdeltat(jj) , 0. ) )
354  ENDIF
355 !
356 !
357 !* 3.4 Ground Ice melt
358 ! ---------------
359 !
360  zeffic(jj) = max(zeffic_min, zwim(jj)/(zwsat_avgz(jj)-xwgmin))
361  zice_melt(jj) = min( zwim(jj)*zwork2(jj), &
362  zksoil*zeffic(jj)*max( zdeltat(jj) , 0. ) )
363 !
364 !
365 !* 3.5 Deep-part of deep-soil Ice reservoir evolution
366 ! ----------------------------------------------
367 !
368  zwit(jj) = zwim(jj) + (ptstep/ztauice(jj))*(1.0-zpsng(jj))* &
369  ((zfreezing(jj) - zice_melt(jj))/ zwork2(jj))
370 !
371  zwit(jj) = max( zwit(jj) , 0. )
372  zwit(jj) = min( zwit(jj) , zwsat_avgz(jj)-xwgmin)
373 !
374 !
375 !* 3.6 Add reservoir evolution from surface freezing (WI2 contains WI1)
376 ! ----------------------------------------------------------------
377 !
378  zwgi2(jj) = (1.-zwork1(jj))*zwit(jj) + zwork1(jj)*zwgi1(jj)
379 !
380  pdwgi2(jj) = zwgi2(jj) - pek%XWGI(jj,2)
381 !
382 !
383 !* 3.7 Effect on temperature
384 ! ---------------------
385 !
386  pek%XTG(jj,2) = pek%XTG(jj,2) + pdwgi2(jj)*xlmtt*dmk%XCG(jj)*xrholw*pk%XDG(jj,2)
387 !
388 ENDDO
389 !
390 IF (lhook) CALL dr_hook('ICE_SOILFR',1,zhook_handle)
391 !-------------------------------------------------------------------------------
392 END SUBROUTINE ice_soilfr
393 
394 
395 
396 
397 
398 
399 
400 
401 
402 
403 
real, save xpi
Definition: modd_csts.F90:43
subroutine ice_soilfr(IO, KK, PK, PEK, DMK, PTSTEP, PKSFC_IVEG, PD
Definition: ice_soilfr.F90:6
real, parameter xundef
real, save xcondi
Definition: modd_csts.F90:82
real, save xg
Definition: modd_csts.F90:55
integer, parameter jprb
Definition: parkind1.F90:32
real, save xci
Definition: modd_csts.F90:65
real, save xday
Definition: modd_csts.F90:45
real, save xcl
Definition: modd_csts.F90:65
logical lhook
Definition: yomhook.F90:15
real, save xrholi
Definition: modd_csts.F90:81
real, save xrholw
Definition: modd_csts.F90:64
real, save xtt
Definition: modd_csts.F90:66
real, save xlmtt
Definition: modd_csts.F90:72