SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
mode_soil.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  MODULE mode_soil
7 ! ################
8 !
9 !!**** *MODE_SOIL * - contains soil characteristics functions
10 !!
11 !! PURPOSE
12 !! -------
13 !
14 !!** METHOD
15 !! ------
16 !!
17 !! All clay and sand proportions are given in FRACTION!!!
18 !! (not in percentages).
19 !!
20 !!
21 !! EXTERNAL
22 !! --------
23 !!
24 !! IMPLICIT ARGUMENTS
25 !! ------------------
26 !!
27 !! REFERENCE
28 !! ---------
29 !! Book2 of the documentation (routine READ_GR_FIELD)
30 !!
31 !!
32 !! AUTHOR
33 !! ------
34 !! V. Masson * Meteo France *
35 !!
36 !! MODIFICATIONS
37 !! -------------
38 !! Original 3/12/98
39 !!
40 !! 02/2014 B. Decharme correction for W33 functions
41 !! Add ANISO_FUNC
42 !-----------------------------------------------------------------------------
43 !
44 !* 0. DECLARATIONS
45 !
46 !
47 !
48 USE yomhook ,ONLY : lhook, dr_hook
49 USE parkind1 ,ONLY : jprb
50 !
51 INTERFACE wsat_func
52  MODULE PROCEDURE wsat_func_2d
53  MODULE PROCEDURE wsat_func_1d
54 END INTERFACE
55 INTERFACE wwilt_func
56  MODULE PROCEDURE wwilt_func_2d
57  MODULE PROCEDURE wwilt_func_1d
58 END INTERFACE
59 INTERFACE wfc_func
60  MODULE PROCEDURE wfc_func_2d
61  MODULE PROCEDURE wfc_func_1d
62 END INTERFACE
63 INTERFACE w33_func
64  MODULE PROCEDURE w33_func_2d
65  MODULE PROCEDURE w33_func_1d
66 END INTERFACE
67 INTERFACE bcoef_func
68  MODULE PROCEDURE bcoef_func_2d
69  MODULE PROCEDURE bcoef_func_1d
70 END INTERFACE
71 INTERFACE matpotsat_func
72  MODULE PROCEDURE matpotsat_func_2d
73  MODULE PROCEDURE matpotsat_func_1d
74 END INTERFACE
75 INTERFACE hydcondsat_func
76  MODULE PROCEDURE hydcondsat_func_2d
77  MODULE PROCEDURE hydcondsat_func_1d
78 END INTERFACE
79 INTERFACE cgsat_func
80  MODULE PROCEDURE cgsat_func_2d
81  MODULE PROCEDURE cgsat_func_1d
82 END INTERFACE
83 INTERFACE c1sat_func
84  MODULE PROCEDURE c1sat_func_2d
85  MODULE PROCEDURE c1sat_func_1d
86 END INTERFACE
87 INTERFACE c2ref_func
88  MODULE PROCEDURE c2ref_func_2d
89  MODULE PROCEDURE c2ref_func_1d
90 END INTERFACE
91 INTERFACE c3_func
92  MODULE PROCEDURE c3_func_2d
93  MODULE PROCEDURE c3_func_1d
94 END INTERFACE
95 INTERFACE c4b_func
96  MODULE PROCEDURE c4b_func_2d
97  MODULE PROCEDURE c4b_func_1d
98 END INTERFACE
99 INTERFACE c4ref_func
100  MODULE PROCEDURE c4ref_func_2d
101  MODULE PROCEDURE c4ref_func_1d
102 END INTERFACE
103 INTERFACE acoef_func
104  MODULE PROCEDURE acoef_func_2d
105  MODULE PROCEDURE acoef_func_1d
106 END INTERFACE
107 INTERFACE pcoef_func
108  MODULE PROCEDURE pcoef_func_2d
109  MODULE PROCEDURE pcoef_func_1d
110 END INTERFACE
111 INTERFACE aniso_func
112  MODULE PROCEDURE aniso_func_2d
113  MODULE PROCEDURE aniso_func_1d
114 END INTERFACE
115 !
116 !-------------------------------------------------------------------------------
117  CONTAINS
118 !
119  FUNCTION wsat_func_2d(PCLAY,PSAND,HPEDOTF)
120  USE modd_surf_par, ONLY : xundef
121  IMPLICIT NONE
122  REAL, DIMENSION(:,:), INTENT(IN) :: pclay
123  REAL, DIMENSION(:,:), INTENT(IN) :: psand
124  CHARACTER(LEN=4), INTENT(IN) :: hpedotf
125  REAL, DIMENSION(SIZE(PSAND,1),SIZE(PSAND,2)) :: wsat_func_2d
126  REAL(KIND=JPRB) :: zhook_handle
127  !
128  IF (lhook) CALL dr_hook('MODE_SOIL:WSAT_FUNC_2D',0,zhook_handle)
129  SELECT CASE (hpedotf)
130  CASE ('CH78')
131  WHERE(psand/=xundef) wsat_func_2d = 0.001 * (-108.*psand+494.305)
132  CASE ('CO84')
133  WHERE(psand/=xundef) wsat_func_2d = 0.505-0.142*psand-0.037*pclay
134  END SELECT
135  !
136  WHERE (psand==xundef) wsat_func_2d = xundef
137  IF (lhook) CALL dr_hook('MODE_SOIL:WSAT_FUNC_2D',1,zhook_handle)
138  !
139  END FUNCTION wsat_func_2d
140  !
141  !
142  !
143  FUNCTION wwilt_func_2d(PCLAY,PSAND,HPEDOTF)
144  USE modd_surf_par, ONLY : xundef
145  IMPLICIT NONE
146  REAL, DIMENSION(:,:), INTENT(IN) :: pclay
147  REAL, DIMENSION(:,:), INTENT(IN) :: psand
148  CHARACTER(LEN=4), INTENT(IN) :: hpedotf
149  REAL, DIMENSION(SIZE(PCLAY,1),SIZE(PCLAY,2)) :: wwilt_func_2d
150  REAL(KIND=JPRB) :: zhook_handle
151  !
152  IF (lhook) CALL dr_hook('MODE_SOIL:WWILT_FUNC_2D',0,zhook_handle)
153  SELECT CASE (hpedotf)
154  CASE ('CH78')
155  WHERE(pclay/=xundef) wwilt_func_2d = 37.1342e-3*(pclay*100.)**0.5
156  CASE ('CO84')
157  WHERE(pclay/=xundef) &
158  wwilt_func_2d = 0.15333-0.147*psand+0.33*pclay-0.102*(pclay**2)
159  END SELECT
160 
161  WHERE (pclay==xundef) wwilt_func_2d = xundef
162  IF (lhook) CALL dr_hook('MODE_SOIL:WWILT_FUNC_2D',1,zhook_handle)
163  !
164  END FUNCTION wwilt_func_2d
165  !
166  !
167  !
168  FUNCTION wfc_func_2d(PCLAY,PSAND,HPEDOTF)
169  USE modd_surf_par, ONLY : xundef
170  IMPLICIT NONE
171  REAL, DIMENSION(:,:), INTENT(IN) :: pclay
172  REAL, DIMENSION(:,:), INTENT(IN) :: psand
173  CHARACTER(LEN=4), INTENT(IN) :: hpedotf
174  REAL, DIMENSION(SIZE(PCLAY,1),SIZE(PCLAY,2)) :: wfc_func_2d
175  REAL(KIND=JPRB) :: zhook_handle
176  !
177  IF (lhook) CALL dr_hook('MODE_SOIL:WFC_FUNC_2D',0,zhook_handle)
178  SELECT CASE (hpedotf)
179  CASE ('CH78')
180  WHERE(pclay/=xundef) wfc_func_2d = 89.0467e-3*(pclay*100.)**0.3496
181  CASE ('CO84')
182  WHERE(pclay/=xundef) &
183  wfc_func_2d = 0.1537-0.1233*psand+0.2685*pclay**(1./3.)
184  END SELECT
185 
186  WHERE (pclay==xundef) wfc_func_2d = xundef
187  IF (lhook) CALL dr_hook('MODE_SOIL:WFC_FUNC_2D',1,zhook_handle)
188  !
189  END FUNCTION wfc_func_2d
190  !
191  !
192  !
193  FUNCTION w33_func_2d(PCLAY,PSAND,HPEDOTF)
194  USE modd_surf_par, ONLY : xundef
195  IMPLICIT NONE
196  REAL, DIMENSION(:,:), INTENT(IN) :: pclay
197  REAL, DIMENSION(:,:), INTENT(IN) :: psand
198  CHARACTER(LEN=4), INTENT(IN) :: hpedotf
199  REAL, DIMENSION(SIZE(PCLAY,1),SIZE(PCLAY,2)) :: w33_func_2d
200  REAL(KIND=JPRB) :: zhook_handle
201  !
202  IF (lhook) CALL dr_hook('MODE_SOIL:W33_FUNC_2D',0,zhook_handle)
203  SELECT CASE (hpedotf)
204  CASE ('CH78')
205  WHERE(pclay/=xundef) &
206  w33_func_2d = 0.2298915119-0.4062575773*psand+0.0874218705*pclay &
207  + 0.2942558675*psand**(1./3.)+0.0413771051*pclay**(1./3.)
208  CASE ('CO84')
209  WHERE(pclay/=xundef) &
210  w33_func_2d = 0.2016592588-0.5785747196*psand+0.1113006987*pclay &
211  + 0.4305771483*psand**(1./3.)-0.0080618093*pclay**(1./3.)
212  END SELECT
213 
214  WHERE (pclay==xundef) w33_func_2d = xundef
215  IF (lhook) CALL dr_hook('MODE_SOIL:W33_FUNC_2D',1,zhook_handle)
216  !
217  END FUNCTION w33_func_2d
218  !
219  !
220  !
221  FUNCTION bcoef_func_2d(PCLAY,PSAND,HPEDOTF)
222  USE modd_surf_par, ONLY : xundef
223  IMPLICIT NONE
224  REAL, DIMENSION(:,:), INTENT(IN) :: pclay
225  REAL, DIMENSION(:,:), INTENT(IN) :: psand
226  CHARACTER(LEN=4), INTENT(IN) :: hpedotf
227  REAL, DIMENSION(SIZE(PCLAY,1),SIZE(PCLAY,2)) :: bcoef_func_2d
228  REAL(KIND=JPRB) :: zhook_handle
229  !
230  IF (lhook) CALL dr_hook('MODE_SOIL:BCOEF_FUNC_2D',0,zhook_handle)
231  SELECT CASE (hpedotf)
232  CASE ('CH78')
233  WHERE (pclay/=xundef) bcoef_func_2d = 13.7*pclay + 3.501
234  CASE ('CO84')
235  WHERE (pclay/=xundef) bcoef_func_2d = 3.10+15.7*pclay-0.3*psand
236  END SELECT
237 
238  WHERE (pclay==xundef) bcoef_func_2d = xundef
239  IF (lhook) CALL dr_hook('MODE_SOIL:BCOEF_FUNC_2D',1,zhook_handle)
240  !
241  END FUNCTION bcoef_func_2d
242  !
243  !
244  !
245  FUNCTION matpotsat_func_2d(PCLAY,PSAND,HPEDOTF)
246  USE modd_surf_par, ONLY : xundef
247  IMPLICIT NONE
248  REAL, DIMENSION(:,:), INTENT(IN) :: pclay
249  REAL, DIMENSION(:,:), INTENT(IN) :: psand
250  CHARACTER(LEN=4), INTENT(IN) :: hpedotf
251  REAL, DIMENSION(SIZE(PSAND,1),SIZE(PSAND,2)) :: matpotsat_func_2d
252  REAL(KIND=JPRB) :: zhook_handle
253  !
254  IF (lhook) CALL dr_hook('MODE_SOIL:MATPOTSAT_FUNC_2D',0,zhook_handle)
255  SELECT CASE (hpedotf)
256  CASE ('CH78')
257  WHERE(psand/=xundef) matpotsat_func_2d = -0.01*(10.**(1.85 - 0.88*psand))
258  CASE ('CO84')
259  WHERE(psand/=xundef) &
260  matpotsat_func_2d = -0.01*(10.0**(1.54-0.95*psand+0.63*(1.-psand-pclay)))
261  END SELECT
262 
263  WHERE (psand==xundef) matpotsat_func_2d = xundef
264  IF (lhook) CALL dr_hook('MODE_SOIL:MATPOTSAT_FUNC_2D',1,zhook_handle)
265  !
266  END FUNCTION matpotsat_func_2d
267  !
268  !
269  FUNCTION hydcondsat_func_2d(PCLAY,PSAND,HPEDOTF)
270  USE modd_surf_par, ONLY : xundef
271  IMPLICIT NONE
272  REAL, DIMENSION(:,:), INTENT(IN) :: pclay
273  REAL, DIMENSION(:,:), INTENT(IN) :: psand
274  CHARACTER(LEN=4), INTENT(IN) :: hpedotf
275  REAL, DIMENSION(SIZE(PCLAY,1),SIZE(PCLAY,2)) :: hydcondsat_func_2d
276  REAL(KIND=JPRB) :: zhook_handle
277  !
278  IF (lhook) CALL dr_hook('MODE_SOIL:HYDCONDSAT_FUNC_2D',0,zhook_handle)
279  SELECT CASE (hpedotf)
280  CASE ('CH78')
281  WHERE(pclay/=xundef)
282  hydcondsat_func_2d = 1.0e-6*(10.0**(0.161874e+01 &
283  - 0.581989e+01*pclay(:,:) - 0.907123e-01*psand(:,:) &
284  + 0.529268e+01*pclay(:,:)**2 + 0.120332e+01*psand(:,:)**2))
285  END WHERE
286  CASE ('CO84')
287  WHERE(pclay/=xundef) &
288  hydcondsat_func_2d = 0.0254*(10.0**(-0.6+1.26*psand-0.64*pclay))/3600.
289  END SELECT
290  !
291  WHERE(pclay==xundef) hydcondsat_func_2d = xundef
292  IF (lhook) CALL dr_hook('MODE_SOIL:HYDCONDSAT_FUNC_2D',1,zhook_handle)
293  !
294  END FUNCTION hydcondsat_func_2d
295  !
296  !
297  !
298  FUNCTION cgsat_func_2d(PCLAY,PSAND)
299  USE modd_surf_par, ONLY : xundef
300  IMPLICIT NONE
301  REAL, DIMENSION(:,:), INTENT(IN) :: pclay
302  REAL, DIMENSION(:,:), INTENT(IN) :: psand
303  REAL, DIMENSION(SIZE(PCLAY,1),SIZE(PCLAY,2)) :: cgsat_func_2d
304  REAL(KIND=JPRB) :: zhook_handle
305  !
306  IF (lhook) CALL dr_hook('MODE_SOIL:CGSAT_FUNC_2D',0,zhook_handle)
307  WHERE (pclay/=xundef)
308  cgsat_func_2d = ( -1.5571*psand - 1.441*pclay + 4.70217 )*1.e-6
309  ELSEWHERE
310  cgsat_func_2d = xundef
311  END WHERE
312  IF (lhook) CALL dr_hook('MODE_SOIL:CGSAT_FUNC_2D',1,zhook_handle)
313  !
314  END FUNCTION cgsat_func_2d
315  !
316  !
317  !
318  FUNCTION c1sat_func_2d(PCLAY)
319  USE modd_surf_par, ONLY : xundef
320  IMPLICIT NONE
321  REAL, DIMENSION(:,:), INTENT(IN) :: pclay
322  REAL, DIMENSION(SIZE(PCLAY,1),SIZE(PCLAY,2)) :: c1sat_func_2d
323  REAL(KIND=JPRB) :: zhook_handle
324  !
325  IF (lhook) CALL dr_hook('MODE_SOIL:C1SAT_FUNC_2D',0,zhook_handle)
326  WHERE (pclay/=xundef)
327  c1sat_func_2d = 0.01*(558.*pclay+84.88)
328  ELSEWHERE
329  c1sat_func_2d = xundef
330  END WHERE
331  IF (lhook) CALL dr_hook('MODE_SOIL:C1SAT_FUNC_2D',1,zhook_handle)
332  !
333  END FUNCTION c1sat_func_2d
334  !
335  !
336  !
337  FUNCTION c2ref_func_2d(PCLAY)
338  USE modd_surf_par, ONLY : xundef
339  IMPLICIT NONE
340  REAL, DIMENSION(:,:), INTENT(IN) :: pclay
341  REAL, DIMENSION(SIZE(PCLAY,1),SIZE(PCLAY,2)) :: c2ref_func_2d
342  REAL(KIND=JPRB) :: zhook_handle
343  !
344  IF (lhook) CALL dr_hook('MODE_SOIL:C2REF_FUNC_2D',0,zhook_handle)
345  WHERE (pclay/=xundef)
346  c2ref_func_2d = 13.815*(pclay*100.)**(-0.954)
347  ELSEWHERE
348  c2ref_func_2d = xundef
349  END WHERE
350  IF (lhook) CALL dr_hook('MODE_SOIL:C2REF_FUNC_2D',1,zhook_handle)
351  !
352  END FUNCTION c2ref_func_2d
353  !
354  !
355  !
356  FUNCTION c3_func_2d(PCLAY)
357  USE modd_surf_par, ONLY : xundef
358  IMPLICIT NONE
359  REAL, DIMENSION(:,:), INTENT(IN) :: pclay
360  REAL, DIMENSION(SIZE(PCLAY,1),SIZE(PCLAY,2)) :: c3_func_2d
361  REAL(KIND=JPRB) :: zhook_handle
362  !
363  IF (lhook) CALL dr_hook('MODE_SOIL:C3_FUNC_2D',0,zhook_handle)
364  WHERE (pclay/=xundef)
365  c3_func_2d = 5.327*(pclay*100.)**(-1.043)
366  ELSEWHERE
367  c3_func_2d = xundef
368  END WHERE
369  IF (lhook) CALL dr_hook('MODE_SOIL:C3_FUNC_2D',1,zhook_handle)
370  !
371  END FUNCTION c3_func_2d
372  !
373  !
374  !
375  FUNCTION c4b_func_2d(PCLAY)
376  USE modd_surf_par, ONLY : xundef
377  IMPLICIT NONE
378  REAL, DIMENSION(:,:), INTENT(IN) :: pclay
379  REAL, DIMENSION(SIZE(PCLAY,1),SIZE(PCLAY,2)) :: c4b_func_2d
380  REAL(KIND=JPRB) :: zhook_handle
381  !
382  IF (lhook) CALL dr_hook('MODE_SOIL:C4B_FUNC_2D',0,zhook_handle)
383  WHERE (pclay/=xundef)
384  c4b_func_2d = 5.14+11.47*pclay
385  ELSEWHERE
386  c4b_func_2d = xundef
387  END WHERE
388  IF (lhook) CALL dr_hook('MODE_SOIL:C4B_FUNC_2D',1,zhook_handle)
389  !
390  END FUNCTION c4b_func_2d
391  !
392  !
393  !
394  FUNCTION c4ref_func_2d(PCLAY,PSAND,PD2,PD3)
395  USE modd_surf_par, ONLY : xundef
396  IMPLICIT NONE
397  REAL, DIMENSION(:,:), INTENT(IN) :: pclay
398  REAL, DIMENSION(:,:), INTENT(IN) :: psand
399  REAL, DIMENSION(:,:), INTENT(IN) :: pd2
400  REAL, DIMENSION(:,:), INTENT(IN) :: pd3
401  REAL, DIMENSION(SIZE(PCLAY,1),SIZE(PCLAY,2)) :: c4ref_func_2d
402  REAL(KIND=JPRB) :: zhook_handle
403  !
404  IF (lhook) CALL dr_hook('MODE_SOIL:C4REF_FUNC_2D',0,zhook_handle)
405  WHERE (pclay/=xundef .AND. pd2/=xundef .AND. pd3/=xundef)
406  c4ref_func_2d = 10.0**( 4.421 &
407  + 0.4881 * psand - 25.73 * pclay &
408  + 5.927 *(psand**2) + 88.63 *(pclay**2) &
409  - 6.085 *(psand**3) - 81.33 *(pclay**3) )
410  !
411  ! Scale the C4 coefficient as a function of grid geometry:
412  ! NOTE that 2.0 represents the value for a coefficient which
413  ! represents the baseline grid geometry with units of m**2
414  ! so that the scaling is dimensionless.
415  !
416  c4ref_func_2d = c4ref_func_2d*2.0*(pd3-pd2)/(pd2*pd3*pd3)
417  !
418  ELSEWHERE
419  c4ref_func_2d = xundef
420  END WHERE
421  IF (lhook) CALL dr_hook('MODE_SOIL:C4REF_FUNC_2D',1,zhook_handle)
422  !
423  END FUNCTION c4ref_func_2d
424  !
425  !
426  !
427  FUNCTION acoef_func_2d(PCLAY)
428  USE modd_surf_par, ONLY : xundef
429  IMPLICIT NONE
430  REAL, DIMENSION(:,:), INTENT(IN) :: pclay
431  REAL, DIMENSION(SIZE(PCLAY,1),SIZE(PCLAY,2)) :: acoef_func_2d
432  REAL(KIND=JPRB) :: zhook_handle
433  !
434  IF (lhook) CALL dr_hook('MODE_SOIL:ACOEF_FUNC_2D',0,zhook_handle)
435  WHERE (pclay/=xundef)
436  acoef_func_2d = 732.42e-3*(pclay*100.)**(-0.539)
437  ELSEWHERE
438  acoef_func_2d = xundef
439  END WHERE
440  IF (lhook) CALL dr_hook('MODE_SOIL:ACOEF_FUNC_2D',1,zhook_handle)
441  !
442  END FUNCTION acoef_func_2d
443  !
444  !
445  !
446  FUNCTION pcoef_func_2d(PCLAY)
447  USE modd_surf_par, ONLY : xundef
448  IMPLICIT NONE
449  REAL, DIMENSION(:,:), INTENT(IN) :: pclay
450  REAL, DIMENSION(SIZE(PCLAY,1),SIZE(PCLAY,2)) :: pcoef_func_2d
451  REAL(KIND=JPRB) :: zhook_handle
452  !
453  IF (lhook) CALL dr_hook('MODE_SOIL:PCOEF_FUNC_2D',0,zhook_handle)
454  WHERE (pclay/=xundef)
455  pcoef_func_2d = 13.4*pclay+3.4
456  ELSEWHERE
457  pcoef_func_2d = xundef
458  END WHERE
459  IF (lhook) CALL dr_hook('MODE_SOIL:PCOEF_FUNC_2D',1,zhook_handle)
460  !
461  END FUNCTION pcoef_func_2d
462  !
463  !
464  !
465  FUNCTION aniso_func_2d(PCLAY)
466  USE modd_surf_par, ONLY : xundef
467  IMPLICIT NONE
468  REAL, DIMENSION(:,:), INTENT(IN) :: pclay
469  REAL, DIMENSION(SIZE(PCLAY,1),SIZE(PCLAY,2)) :: aniso_func_2d
470  REAL(KIND=JPRB) :: zhook_handle
471  !
472  IF (lhook) CALL dr_hook('MODE_SOIL:ANISO_FUNC_2D',0,zhook_handle)
473  WHERE (pclay/=xundef)
474  aniso_func_2d = 1.55+32.85*pclay(:,:)+65.637*pclay(:,:)**2
475  ELSEWHERE
476  aniso_func_2d = xundef
477  END WHERE
478  IF (lhook) CALL dr_hook('MODE_SOIL:ANISO_FUNC_2D',1,zhook_handle)
479  !
480  END FUNCTION aniso_func_2d
481 
482 !
483 !
484 !-------------------------------------------------------------------------------
485 !
486  FUNCTION wsat_func_1d(PCLAY,PSAND,HPEDOTF)
487  USE modd_surf_par, ONLY : xundef
488  IMPLICIT NONE
489  REAL, DIMENSION(:), INTENT(IN) :: pclay
490  REAL, DIMENSION(:), INTENT(IN) :: psand
491  CHARACTER(LEN=4), INTENT(IN) :: hpedotf
492  REAL, DIMENSION(SIZE(PSAND)) :: wsat_func_1d
493  REAL(KIND=JPRB) :: zhook_handle
494  !
495  IF (lhook) CALL dr_hook('MODE_SOIL:WSAT_FUNC_1D',0,zhook_handle)
496  SELECT CASE (hpedotf)
497  CASE ('CH78')
498  WHERE(psand/=xundef) wsat_func_1d = 0.001 * (-108.*psand+494.305)
499  CASE ('CO84')
500  WHERE(psand/=xundef) wsat_func_1d = 0.505-0.142*psand-0.037*pclay
501  END SELECT
502 
503  WHERE (psand==xundef) wsat_func_1d = xundef
504  IF (lhook) CALL dr_hook('MODE_SOIL:WSAT_FUNC_1D',1,zhook_handle)
505  !
506  END FUNCTION wsat_func_1d
507  !
508  !
509  !
510  FUNCTION wwilt_func_1d(PCLAY,PSAND,HPEDOTF)
511  USE modd_surf_par, ONLY : xundef
512  IMPLICIT NONE
513  REAL, DIMENSION(:), INTENT(IN) :: pclay
514  REAL, DIMENSION(:), INTENT(IN) :: psand
515  CHARACTER(LEN=4), INTENT(IN) :: hpedotf
516  REAL, DIMENSION(SIZE(PCLAY)) :: wwilt_func_1d
517  REAL(KIND=JPRB) :: zhook_handle
518  !
519  IF (lhook) CALL dr_hook('MODE_SOIL:WWILT_FUNC_1D',0,zhook_handle)
520  SELECT CASE (hpedotf)
521  CASE ('CH78')
522  WHERE(pclay/=xundef) wwilt_func_1d = 37.1342e-3*(pclay*100.)**0.5
523  CASE ('CO84')
524  WHERE(pclay/=xundef) &
525  wwilt_func_1d = 0.15333-0.147*psand+0.33*pclay-0.102*(pclay**2)
526  END SELECT
527  !
528  WHERE (pclay==xundef) wwilt_func_1d = xundef
529  IF (lhook) CALL dr_hook('MODE_SOIL:WWILT_FUNC_1D',1,zhook_handle)
530  !
531  END FUNCTION wwilt_func_1d
532  !
533  !
534  !
535  FUNCTION wfc_func_1d(PCLAY,PSAND,HPEDOTF)
536  USE modd_surf_par, ONLY : xundef
537  IMPLICIT NONE
538  REAL, DIMENSION(:), INTENT(IN) :: pclay
539  REAL, DIMENSION(:), INTENT(IN) :: psand
540  CHARACTER(LEN=4), INTENT(IN) :: hpedotf
541  REAL, DIMENSION(SIZE(PCLAY)) :: wfc_func_1d
542  REAL(KIND=JPRB) :: zhook_handle
543  !
544  IF (lhook) CALL dr_hook('MODE_SOIL:WFC_FUNC_1D',0,zhook_handle)
545  SELECT CASE (hpedotf)
546  CASE ('CH78')
547  WHERE(pclay/=xundef) wfc_func_1d = 89.0467e-3*(pclay*100.)**0.3496
548  CASE ('CO84')
549  WHERE(pclay/=xundef) &
550  wfc_func_1d = 0.1537-0.1233*psand+0.2685*pclay**(1./3.)
551  END SELECT
552  !
553  WHERE (pclay==xundef) wfc_func_1d = xundef
554  IF (lhook) CALL dr_hook('MODE_SOIL:WFC_FUNC_1D',1,zhook_handle)
555  !
556  END FUNCTION wfc_func_1d
557  !
558  !
559  !
560  FUNCTION w33_func_1d(PCLAY,PSAND,HPEDOTF)
561  USE modd_surf_par, ONLY : xundef
562  IMPLICIT NONE
563  REAL, DIMENSION(:), INTENT(IN) :: pclay
564  REAL, DIMENSION(:), INTENT(IN) :: psand
565  CHARACTER(LEN=4), INTENT(IN) :: hpedotf
566  REAL, DIMENSION(SIZE(PCLAY)) :: w33_func_1d
567  REAL(KIND=JPRB) :: zhook_handle
568  !
569  IF (lhook) CALL dr_hook('MODE_SOIL:W33_FUNC_1D',0,zhook_handle)
570  SELECT CASE (hpedotf)
571  CASE ('CH78')
572  WHERE(pclay/=xundef) &
573  w33_func_1d = 0.2298915119-0.4062575773*psand+0.0874218705*pclay &
574  + 0.2942558675*psand**(1./3.)+0.0413771051*pclay**(1./3.)
575  CASE ('CO84')
576  WHERE(pclay/=xundef) &
577  w33_func_1d = 0.2016592588-0.5785747196*psand+0.1113006987*pclay &
578  + 0.4305771483*psand**(1./3.)-0.0080618093*pclay**(1./3.)
579  END SELECT
580 
581  WHERE (pclay==xundef) w33_func_1d = xundef
582  IF (lhook) CALL dr_hook('MODE_SOIL:W33_FUNC_1D',1,zhook_handle)
583  !
584  END FUNCTION w33_func_1d
585  !
586  !
587  !
588  FUNCTION bcoef_func_1d(PCLAY,PSAND,HPEDOTF)
589  USE modd_surf_par, ONLY : xundef
590  IMPLICIT NONE
591  REAL, DIMENSION(:), INTENT(IN) :: pclay
592  REAL, DIMENSION(:), INTENT(IN) :: psand
593  CHARACTER(LEN=4), INTENT(IN) :: hpedotf
594  REAL, DIMENSION(SIZE(PCLAY)) :: bcoef_func_1d
595  REAL(KIND=JPRB) :: zhook_handle
596  !
597  IF (lhook) CALL dr_hook('MODE_SOIL:BCOEF_FUNC_1D',0,zhook_handle)
598  SELECT CASE (hpedotf)
599  CASE ('CH78')
600  WHERE (pclay/=xundef) bcoef_func_1d = 13.7*pclay + 3.501
601  CASE ('CO84')
602  WHERE (pclay/=xundef) bcoef_func_1d = 3.10+15.7*pclay-0.3*psand
603  END SELECT
604 
605  WHERE (pclay==xundef) bcoef_func_1d = xundef
606  IF (lhook) CALL dr_hook('MODE_SOIL:BCOEF_FUNC_1D',1,zhook_handle)
607  !
608  END FUNCTION bcoef_func_1d
609  !
610  !
611  !
612  FUNCTION matpotsat_func_1d(PCLAY,PSAND,HPEDOTF)
613  USE modd_surf_par, ONLY : xundef
614  IMPLICIT NONE
615  REAL, DIMENSION(:), INTENT(IN) :: pclay
616  REAL, DIMENSION(:), INTENT(IN) :: psand
617  CHARACTER(LEN=4), INTENT(IN) :: hpedotf
618  REAL, DIMENSION(SIZE(PSAND)) :: matpotsat_func_1d
619  REAL(KIND=JPRB) :: zhook_handle
620  !
621  IF (lhook) CALL dr_hook('MODE_SOIL:MATPOTSAT_FUNC_1D',0,zhook_handle)
622  SELECT CASE (hpedotf)
623  CASE ('CH78')
624  WHERE(psand/=xundef) matpotsat_func_1d = -0.01*(10.**(1.85 - 0.88*psand))
625  CASE ('CO84')
626  WHERE(psand/=xundef) &
627  matpotsat_func_1d = -0.01*(10.0**(1.54-0.95*psand+0.63*(1.-psand-pclay)))
628  END SELECT
629 
630  WHERE (psand==xundef) matpotsat_func_1d = xundef
631  IF (lhook) CALL dr_hook('MODE_SOIL:MATPOTSAT_FUNC_1D',1,zhook_handle)
632  !
633  END FUNCTION matpotsat_func_1d
634  !
635  !
636  !
637  FUNCTION hydcondsat_func_1d(PCLAY,PSAND,HPEDOTF)
638  USE modd_surf_par, ONLY : xundef
639  IMPLICIT NONE
640  REAL, DIMENSION(:), INTENT(IN) :: pclay
641  REAL, DIMENSION(:), INTENT(IN) :: psand
642  CHARACTER(LEN=4), INTENT(IN) :: hpedotf
643  REAL, DIMENSION(SIZE(PCLAY)) :: hydcondsat_func_1d
644  REAL(KIND=JPRB) :: zhook_handle
645  !
646  IF (lhook) CALL dr_hook('MODE_SOIL:HYDCONDSAT_FUNC_1D',0,zhook_handle)
647  SELECT CASE (hpedotf)
648  CASE ('CH78')
649  WHERE(pclay/=xundef)
650  hydcondsat_func_1d = 1.0e-6*(10.0**(0.161874e+01 &
651  - 0.581989e+01*pclay - 0.907123e-01*psand &
652  + 0.529268e+01*pclay**2 + 0.120332e+01*psand**2))
653  END WHERE
654  CASE ('CO84')
655  WHERE(pclay/=xundef) &
656  hydcondsat_func_1d = 0.0254*(10.0**(-0.6+1.26*psand-0.64*pclay))/3600.
657  END SELECT
658  !
659  WHERE(pclay==xundef) hydcondsat_func_1d = xundef
660  IF (lhook) CALL dr_hook('MODE_SOIL:HYDCONDSAT_FUNC_1D',1,zhook_handle)
661  !
662  END FUNCTION hydcondsat_func_1d
663  !
664  !
665  !
666  FUNCTION cgsat_func_1d(PCLAY,PSAND)
667  USE modd_surf_par, ONLY : xundef
668  IMPLICIT NONE
669  REAL, DIMENSION(:), INTENT(IN) :: pclay
670  REAL, DIMENSION(:), INTENT(IN) :: psand
671  REAL, DIMENSION(SIZE(PCLAY)) :: cgsat_func_1d
672  REAL(KIND=JPRB) :: zhook_handle
673  !
674  IF (lhook) CALL dr_hook('MODE_SOIL:CGSAT_FUNC_1D',0,zhook_handle)
675  WHERE (pclay/=xundef)
676  cgsat_func_1d = ( -1.5571*psand - 1.441*pclay + 4.70217 )*1.e-6
677  ELSEWHERE
678  cgsat_func_1d = xundef
679  END WHERE
680  IF (lhook) CALL dr_hook('MODE_SOIL:CGSAT_FUNC_1D',1,zhook_handle)
681  !
682  END FUNCTION cgsat_func_1d
683  !
684  !
685  !
686  FUNCTION c1sat_func_1d(PCLAY)
687  USE modd_surf_par, ONLY : xundef
688  IMPLICIT NONE
689  REAL, DIMENSION(:), INTENT(IN) :: pclay
690  REAL, DIMENSION(SIZE(PCLAY)) :: c1sat_func_1d
691  REAL(KIND=JPRB) :: zhook_handle
692  !
693  IF (lhook) CALL dr_hook('MODE_SOIL:C1SAT_FUNC_1D',0,zhook_handle)
694  WHERE (pclay/=xundef)
695  c1sat_func_1d = 0.01*(558.*pclay+84.88)
696  ELSEWHERE
697  c1sat_func_1d = xundef
698  END WHERE
699  IF (lhook) CALL dr_hook('MODE_SOIL:C1SAT_FUNC_1D',1,zhook_handle)
700  !
701  END FUNCTION c1sat_func_1d
702  !
703  !
704  !
705  FUNCTION c2ref_func_1d(PCLAY)
706  USE modd_surf_par, ONLY : xundef
707  IMPLICIT NONE
708  REAL, DIMENSION(:), INTENT(IN) :: pclay
709  REAL, DIMENSION(SIZE(PCLAY)) :: c2ref_func_1d
710  REAL(KIND=JPRB) :: zhook_handle
711  !
712  IF (lhook) CALL dr_hook('MODE_SOIL:C2REF_FUNC_1D',0,zhook_handle)
713  WHERE (pclay/=xundef)
714  c2ref_func_1d = 13.815*(pclay*100.)**(-0.954)
715  ELSEWHERE
716  c2ref_func_1d = xundef
717  END WHERE
718  IF (lhook) CALL dr_hook('MODE_SOIL:C2REF_FUNC_1D',1,zhook_handle)
719  !
720  END FUNCTION c2ref_func_1d
721  !
722  !
723  !
724  FUNCTION c3_func_1d(PCLAY)
725  USE modd_surf_par, ONLY : xundef
726  IMPLICIT NONE
727  REAL, DIMENSION(:), INTENT(IN) :: pclay
728  REAL, DIMENSION(SIZE(PCLAY)) :: c3_func_1d
729  REAL(KIND=JPRB) :: zhook_handle
730  !
731  IF (lhook) CALL dr_hook('MODE_SOIL:C3_FUNC_1D',0,zhook_handle)
732  WHERE (pclay/=xundef)
733  c3_func_1d = 5.327*(pclay*100.)**(-1.043)
734  ELSEWHERE
735  c3_func_1d = xundef
736  END WHERE
737  IF (lhook) CALL dr_hook('MODE_SOIL:C3_FUNC_1D',1,zhook_handle)
738  !
739  END FUNCTION c3_func_1d
740  !
741  !
742  !
743  FUNCTION c4b_func_1d(PCLAY)
744  USE modd_surf_par, ONLY : xundef
745  IMPLICIT NONE
746  REAL, DIMENSION(:), INTENT(IN) :: pclay
747  REAL, DIMENSION(SIZE(PCLAY)) :: c4b_func_1d
748  REAL(KIND=JPRB) :: zhook_handle
749  !
750  IF (lhook) CALL dr_hook('MODE_SOIL:C4B_FUNC_1D',0,zhook_handle)
751  WHERE (pclay/=xundef)
752  c4b_func_1d = 5.14+11.47*pclay
753  ELSEWHERE
754  c4b_func_1d = xundef
755  END WHERE
756  IF (lhook) CALL dr_hook('MODE_SOIL:C4B_FUNC_1D',1,zhook_handle)
757  !
758  END FUNCTION c4b_func_1d
759  !
760  !
761  !
762  FUNCTION c4ref_func_1d(PCLAY,PSAND,PD2,PD3)
763  USE modd_surf_par, ONLY : xundef
764  IMPLICIT NONE
765  REAL, DIMENSION(:), INTENT(IN) :: pclay
766  REAL, DIMENSION(:), INTENT(IN) :: psand
767  REAL, DIMENSION(:), INTENT(IN) :: pd2
768  REAL, DIMENSION(:), INTENT(IN) :: pd3
769  REAL, DIMENSION(SIZE(PCLAY)) :: c4ref_func_1d
770  REAL(KIND=JPRB) :: zhook_handle
771  !
772  IF (lhook) CALL dr_hook('MODE_SOIL:C4REF_FUNC_1D',0,zhook_handle)
773  WHERE (pclay/=xundef .AND. pd2/=xundef .AND. pd3/=xundef)
774  c4ref_func_1d = 10.0**( 4.421 &
775  + 0.4881 * psand - 25.73 * pclay &
776  + 5.927 *(psand**2) + 88.63 *(pclay**2) &
777  - 6.085 *(psand**3) - 81.33 *(pclay**3) )
778  !
779  ! Scale the C4 coefficient as a function of grid geometry:
780  ! NOTE that 2.0 represents the value for a coefficient which
781  ! represents the baseline grid geometry with units of m**2
782  ! so that the scaling is dimensionless.
783  !
784  c4ref_func_1d = c4ref_func_1d*2.0*(pd3-pd2)/(pd2*pd3*pd3)
785  !
786  ELSEWHERE
787  c4ref_func_1d = xundef
788  END WHERE
789  IF (lhook) CALL dr_hook('MODE_SOIL:C4REF_FUNC_1D',1,zhook_handle)
790  !
791  END FUNCTION c4ref_func_1d
792  !
793  !
794  !
795  FUNCTION acoef_func_1d(PCLAY)
796  USE modd_surf_par, ONLY : xundef
797  IMPLICIT NONE
798  REAL, DIMENSION(:), INTENT(IN) :: pclay
799  REAL, DIMENSION(SIZE(PCLAY)) :: acoef_func_1d
800  REAL(KIND=JPRB) :: zhook_handle
801  !
802  IF (lhook) CALL dr_hook('MODE_SOIL:ACOEF_FUNC_1D',0,zhook_handle)
803  WHERE (pclay/=xundef)
804  acoef_func_1d = 732.42e-3*(pclay*100.)**(-0.539)
805  ELSEWHERE
806  acoef_func_1d = xundef
807  END WHERE
808  IF (lhook) CALL dr_hook('MODE_SOIL:ACOEF_FUNC_1D',1,zhook_handle)
809  !
810  END FUNCTION acoef_func_1d
811  !
812  !
813  !
814  FUNCTION pcoef_func_1d(PCLAY)
815  USE modd_surf_par, ONLY : xundef
816  IMPLICIT NONE
817  REAL, DIMENSION(:), INTENT(IN) :: pclay
818  REAL, DIMENSION(SIZE(PCLAY)) :: pcoef_func_1d
819  REAL(KIND=JPRB) :: zhook_handle
820  !
821  IF (lhook) CALL dr_hook('MODE_SOIL:PCOEF_FUNC_1D',0,zhook_handle)
822  WHERE (pclay/=xundef)
823  pcoef_func_1d = 13.4*pclay+3.4
824  ELSEWHERE
825  pcoef_func_1d = xundef
826  END WHERE
827  IF (lhook) CALL dr_hook('MODE_SOIL:PCOEF_FUNC_1D',1,zhook_handle)
828  !
829  END FUNCTION pcoef_func_1d
830  !
831  !
832  !
833  FUNCTION aniso_func_1d(PCLAY)
834  USE modd_surf_par, ONLY : xundef
835  IMPLICIT NONE
836  REAL, DIMENSION(:), INTENT(IN) :: pclay
837  REAL, DIMENSION(SIZE(PCLAY)) :: aniso_func_1d
838  REAL(KIND=JPRB) :: zhook_handle
839  !
840  IF (lhook) CALL dr_hook('MODE_SOIL:ANISO_FUNC_1D',0,zhook_handle)
841  WHERE (pclay/=xundef)
842  aniso_func_1d = 1.55+32.85*pclay(:)+65.637*pclay(:)**2
843  ELSEWHERE
844  aniso_func_1d = xundef
845  END WHERE
846  IF (lhook) CALL dr_hook('MODE_SOIL:ANISO_FUNC_1D',1,zhook_handle)
847  !
848  END FUNCTION aniso_func_1d
849 
850 !-------------------------------------------------------------------------------
851 !
852 END MODULE mode_soil
real function, dimension(size(pclay, 1), size(pclay, 2)) c3_func_2d(PCLAY)
Definition: mode_soil.F90:356
real function, dimension(size(pclay)) aniso_func_1d(PCLAY)
Definition: mode_soil.F90:833
real function, dimension(size(pclay)) c4ref_func_1d(PCLAY, PSAND, PD2, PD3)
Definition: mode_soil.F90:762
real function, dimension(size(pclay)) hydcondsat_func_1d(PCLAY, PSAND, HPEDOTF)
Definition: mode_soil.F90:637
real function, dimension(size(pclay)) c4b_func_1d(PCLAY)
Definition: mode_soil.F90:743
real function, dimension(size(pclay)) acoef_func_1d(PCLAY)
Definition: mode_soil.F90:795
real function, dimension(size(pclay)) wfc_func_1d(PCLAY, PSAND, HPEDOTF)
Definition: mode_soil.F90:535
real function, dimension(size(psand)) matpotsat_func_1d(PCLAY, PSAND, HPEDOTF)
Definition: mode_soil.F90:612
real function, dimension(size(pclay)) c3_func_1d(PCLAY)
Definition: mode_soil.F90:724
real function, dimension(size(pclay, 1), size(pclay, 2)) aniso_func_2d(PCLAY)
Definition: mode_soil.F90:465
real function, dimension(size(pclay, 1), size(pclay, 2)) wwilt_func_2d(PCLAY, PSAND, HPEDOTF)
Definition: mode_soil.F90:143
real function, dimension(size(pclay, 1), size(pclay, 2)) c4b_func_2d(PCLAY)
Definition: mode_soil.F90:375
real function, dimension(size(psand, 1), size(psand, 2)) matpotsat_func_2d(PCLAY, PSAND, HPEDOTF)
Definition: mode_soil.F90:245
real function, dimension(size(pclay)) pcoef_func_1d(PCLAY)
Definition: mode_soil.F90:814
real function, dimension(size(pclay, 1), size(pclay, 2)) bcoef_func_2d(PCLAY, PSAND, HPEDOTF)
Definition: mode_soil.F90:221
real function, dimension(size(pclay)) c1sat_func_1d(PCLAY)
Definition: mode_soil.F90:686
real function, dimension(size(psand, 1), size(psand, 2)) wsat_func_2d(PCLAY, PSAND, HPEDOTF)
Definition: mode_soil.F90:119
real function, dimension(size(pclay, 1), size(pclay, 2)) wfc_func_2d(PCLAY, PSAND, HPEDOTF)
Definition: mode_soil.F90:168
real function, dimension(size(pclay, 1), size(pclay, 2)) c2ref_func_2d(PCLAY)
Definition: mode_soil.F90:337
real function, dimension(size(pclay)) cgsat_func_1d(PCLAY, PSAND)
Definition: mode_soil.F90:666
real function, dimension(size(pclay, 1), size(pclay, 2)) pcoef_func_2d(PCLAY)
Definition: mode_soil.F90:446
real function, dimension(size(pclay, 1), size(pclay, 2)) hydcondsat_func_2d(PCLAY, PSAND, HPEDOTF)
Definition: mode_soil.F90:269
real function, dimension(size(pclay, 1), size(pclay, 2)) w33_func_2d(PCLAY, PSAND, HPEDOTF)
Definition: mode_soil.F90:193
real function, dimension(size(pclay, 1), size(pclay, 2)) acoef_func_2d(PCLAY)
Definition: mode_soil.F90:427
real function, dimension(size(pclay)) bcoef_func_1d(PCLAY, PSAND, HPEDOTF)
Definition: mode_soil.F90:588
real function, dimension(size(pclay, 1), size(pclay, 2)) cgsat_func_2d(PCLAY, PSAND)
Definition: mode_soil.F90:298
real function, dimension(size(pclay)) c2ref_func_1d(PCLAY)
Definition: mode_soil.F90:705
real function, dimension(size(pclay)) w33_func_1d(PCLAY, PSAND, HPEDOTF)
Definition: mode_soil.F90:560
real function, dimension(size(pclay, 1), size(pclay, 2)) c4ref_func_2d(PCLAY, PSAND, PD2, PD3)
Definition: mode_soil.F90:394
real function, dimension(size(psand)) wsat_func_1d(PCLAY, PSAND, HPEDOTF)
Definition: mode_soil.F90:486
real function, dimension(size(pclay)) wwilt_func_1d(PCLAY, PSAND, HPEDOTF)
Definition: mode_soil.F90:510
real function, dimension(size(pclay, 1), size(pclay, 2)) c1sat_func_2d(PCLAY)
Definition: mode_soil.F90:318