SURFEX v8.1
General documentation of Surfex
soil_albedo.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 soil_albedo(HALBEDO, PWSAT, PWG1, KK, PEK, HBAND)
7 ! ####################################################################
8 !
9 !!**** *SOIL_ALBEDO*
10 !!
11 !! PURPOSE
12 !! -------
13 ! computes the SOIL_ALBEDO of for different types (patches)
14 ! of natural continental parts.
15 !
16 ! Soil SOIL_ALBEDO is estimated from sand fraction.
17 ! A correction due to the soil humidity can be used.
18 !
19 !
20 !!** METHOD
21 !! ------
22 !
23 !! EXTERNAL
24 !! --------
25 !!
26 !! IMPLICIT ARGUMENTS
27 !! ------------------
28 !!
29 !!
30 !! REFERENCE
31 !! ---------
32 !!
33 !!
34 !! AUTHOR
35 !! ------
36 !! F.Solmon / V. Masson
37 !!
38 !! MODIFICATIONS
39 !! -------------
40 !! Original
41 !-------------------------------------------------------------------------------
42 !
43 !* 0. DECLARATIONS
44 ! ------------
45 !
46 USE modd_isba_n, ONLY : isba_k_t, isba_pe_t
47 !
48 USE modd_surf_par, ONLY : xundef
49 !
50 USE yomhook ,ONLY : lhook, dr_hook
51 USE parkind1 ,ONLY : jprb
52 !
53 IMPLICIT NONE
54 !
55 !* 0.1 declarations of arguments
56 ! -------------------------
57 !
58  CHARACTER(LEN=*), INTENT(IN) :: HALBEDO
59 ! SOIL_ALBEDO dependance wxith surface soil water content
60 ! "EVOL" = SOIL_ALBEDO evolves with soil wetness
61 ! "DRY " = constant SOIL_ALBEDO value for dry soil
62 ! "WET " = constant SOIL_ALBEDO value for wet soil
63 ! "MEAN" = constant SOIL_ALBEDO value for medium soil wetness
64 !
65 REAL, DIMENSION(:), INTENT(IN) :: PWSAT ! saturation water content
66 REAL, DIMENSION(:), INTENT(IN) :: PWG1 ! surface water content
67 !
68 TYPE(isba_k_t), INTENT(INOUT) :: KK
69 TYPE(isba_pe_t), INTENT(INOUT) :: PEK
70 !
71  CHARACTER(LEN=*), INTENT(IN) :: HBAND
72 !
73 !* 0.2 declarations of local variables
74 ! -------------------------------
75 !
76 REAL, DIMENSION(SIZE(PWSAT)) :: ZX
77 !
78 REAL(KIND=JPRB) :: ZHOOK_HANDLE
79 !-------------------------------------------------------------------------------
80 !
81 IF (lhook) CALL dr_hook('SOIL_ALBEDO',0,zhook_handle)
82 IF (halbedo=='USER' .AND. lhook) CALL dr_hook('SOIL_ALBEDO',1,zhook_handle)
83 IF (halbedo=='USER') RETURN
84 !
85 IF (trim(hband)=="VIS".OR.trim(hband)=="ALL") pek%XALBVIS_SOIL = xundef
86 IF (trim(hband)=="NIR".OR.trim(hband)=="ALL") pek%XALBNIR_SOIL = xundef
87 IF (trim(hband)=="UV" .OR.trim(hband)=="ALL") pek%XALBUV_SOIL = xundef
88 !
89 SELECT CASE ( halbedo )
90 CASE ('EVOL')
91 
92  zx = min( pwg1(:)/pwsat(:) , 1. )
93 
94  IF (trim(hband)=="VIS".OR.trim(hband)=="ALL") &
95  WHERE (pwg1(:)/=xundef) &
96  pek%XALBVIS_SOIL(:) = kk%XALBVIS_WET(:) + &
97  (0.25*kk%XALBVIS_DRY(:)-kk%XALBVIS_WET(:)) * (1. - zx(:)) * &
98  ( zx(:) + (kk%XALBVIS_DRY(:)-kk%XALBVIS_WET(:)) / (0.25*kk%XALBVIS_DRY(:)-kk%XALBVIS_WET(:)) )
99  IF (trim(hband)=="NIR".OR.trim(hband)=="ALL") &
100  WHERE (pwg1(:)/=xundef) &
101  pek%XALBNIR_SOIL(:) = kk%XALBNIR_WET(:) + &
102  (0.25*kk%XALBNIR_DRY(:)-kk%XALBNIR_WET(:)) * (1. - zx(:)) * &
103  ( zx(:) + (kk%XALBNIR_DRY(:)-kk%XALBNIR_WET(:)) / (0.25*kk%XALBNIR_DRY(:)-kk%XALBNIR_WET(:)) )
104  IF (trim(hband)=="UV".OR.trim(hband)=="ALL") &
105  WHERE (pwg1(:)/=xundef) &
106  pek%XALBUV_SOIL (:) = kk%XALBUV_WET (:) + &
107  (0.25*kk%XALBUV_DRY (:)-kk%XALBUV_WET (:)) * (1. - zx(:)) * &
108  ( zx(:) + (kk%XALBUV_DRY (:)-kk%XALBUV_WET (:)) / (0.25*kk%XALBUV_DRY (:)-kk%XALBUV_WET (:)) )
109 
110  !END WHERE
111 
112 CASE ('DRY ')
113  IF (trim(hband)=="VIS".OR.trim(hband)=="ALL") &
114  WHERE (pwg1(:)/=xundef) pek%XALBVIS_SOIL(:) = kk%XALBVIS_DRY(:)
115  IF (trim(hband)=="NIR".OR.trim(hband)=="ALL") &
116  WHERE (pwg1(:)/=xundef) pek%XALBNIR_SOIL(:) = kk%XALBNIR_DRY(:)
117  IF (trim(hband)=="UV".OR.trim(hband)=="ALL") &
118  WHERE (pwg1(:)/=xundef) pek%XALBUV_SOIL (:) = kk%XALBUV_DRY (:)
119 
120 CASE ('WET ')
121  IF (trim(hband)=="VIS".OR.trim(hband)=="ALL") &
122  WHERE (pwg1(:)/=xundef) pek%XALBVIS_SOIL(:) = kk%XALBVIS_WET(:)
123  IF (trim(hband)=="NIR".OR.trim(hband)=="ALL") &
124  WHERE (pwg1(:)/=xundef) pek%XALBNIR_SOIL(:) = kk%XALBNIR_WET(:)
125  IF (trim(hband)=="UV".OR.trim(hband)=="ALL") &
126  WHERE (pwg1(:)/=xundef) pek%XALBUV_SOIL (:) = kk%XALBUV_WET (:)
127 
128 CASE ('MEAN')
129  IF (trim(hband)=="VIS".OR.trim(hband)=="ALL") &
130  WHERE (pwg1(:)/=xundef) pek%XALBVIS_SOIL(:) = 0.5 * ( kk%XALBVIS_DRY(:) + kk%XALBVIS_WET(:) )
131  IF (trim(hband)=="NIR".OR.trim(hband)=="ALL") &
132  WHERE (pwg1(:)/=xundef) pek%XALBNIR_SOIL(:) = 0.5 * ( kk%XALBNIR_DRY(:) + kk%XALBNIR_WET(:) )
133  IF (trim(hband)=="UV".OR.trim(hband)=="ALL") &
134  WHERE (pwg1(:)/=xundef) pek%XALBUV_SOIL (:) = 0.5 * ( kk%XALBUV_DRY (:) + kk%XALBUV_WET (:) )
135 
136 END SELECT
137 IF (lhook) CALL dr_hook('SOIL_ALBEDO',1,zhook_handle)
138 !
139 !-------------------------------------------------------------------------------
140 !
141 END SUBROUTINE soil_albedo
static const char * trim(const char *name, int *n)
Definition: drhook.c:2383
real, parameter xundef
integer, parameter jprb
Definition: parkind1.F90:32
subroutine soil_albedo(HALBEDO, PWSAT, PWG1, KK, PEK, HBAND)
Definition: soil_albedo.F90:7
logical lhook
Definition: yomhook.F90:15