SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
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 MODULE modi_albedo
7 ! ###########
8 !
9 INTERFACE albedo
10 !
11 !
12  SUBROUTINE albedo_1d(HALBEDO, &
13  palbvis_veg,palbnir_veg,palbuv_veg,pveg, &
14  palbvis_soil,palbnir_soil,palbuv_soil, &
15  palbvis_eco ,palbnir_eco, palbuv_eco, &
16  psnow, omask )
17 !
18 !
19 !* 0.1 declarations of arguments
20 ! -------------------------
21 !
22  CHARACTER(LEN=*), INTENT(IN) :: halbedo
23 ! Albedo dependance wxith surface soil water content
24 ! "EVOL" = albedo evolves with soil wetness
25 ! "DRY " = constant albedo value for dry soil
26 ! "WET " = constant albedo value for wet soil
27 ! "MEAN" = constant albedo value for medium soil wetness
28 !
29 REAL, DIMENSION(:), INTENT(IN) :: palbvis_veg ! visible, near infra-red and UV
30 REAL, DIMENSION(:), INTENT(IN) :: palbnir_veg ! albedo of the vegetation
31 REAL, DIMENSION(:), INTENT(IN) :: palbuv_veg !
32 REAL, DIMENSION(:), INTENT(IN) :: pveg ! fraction of vegetation
33 REAL, DIMENSION(:), INTENT(IN) :: palbvis_soil! visible, near infra-red and UV
34 REAL, DIMENSION(:), INTENT(IN) :: palbnir_soil! soil albedo
35 REAL, DIMENSION(:), INTENT(IN) :: palbuv_soil !
36 !
37 REAL, DIMENSION(:), INTENT(INOUT) :: palbvis_eco ! visible, near infra-red and UV
38 REAL, DIMENSION(:), INTENT(INOUT) :: palbnir_eco ! averaged albedo
39 REAL, DIMENSION(:), INTENT(INOUT) :: palbuv_eco !
40 REAL, DIMENSION(:), INTENT(IN), OPTIONAL :: psnow ! fraction of permanent snow and ice
41 LOGICAL, DIMENSION(:), INTENT(IN), OPTIONAL :: omask ! mask where computations are done
42 !
43 END SUBROUTINE albedo_1d
44 !
45 !
46  SUBROUTINE albedo_1d_patch(HALBEDO, &
47  palbvis_veg,palbnir_veg,palbuv_veg,pveg, &
48  palbvis_soil,palbnir_soil,palbuv_soil, &
49  palbvis_eco ,palbnir_eco, palbuv_eco, &
50  pvegtype, omask )
51 !
52 !
53 !* 0.1 declarations of arguments
54 ! -------------------------
55 !
56 !
57  CHARACTER(LEN=*), INTENT(IN) :: halbedo
58 ! Albedo dependance wxith surface soil water content
59 ! "EVOL" = albedo evolves with soil wetness
60 ! "DRY " = constant albedo value for dry soil
61 ! "WET " = constant albedo value for wet soil
62 ! "MEAN" = constant albedo value for medium soil wetness
63 !
64 REAL, DIMENSION(:,:), INTENT(IN) :: palbvis_veg ! visible, near infra-red and UV
65 REAL, DIMENSION(:,:), INTENT(IN) :: palbnir_veg ! albedo of the vegetation
66 REAL, DIMENSION(:,:), INTENT(IN) :: palbuv_veg !
67 REAL, DIMENSION(:,:), INTENT(IN) :: pveg ! fraction of vegetation
68 REAL, DIMENSION(:,:), INTENT(IN) :: palbvis_soil! visible, near infra-red and UV
69 REAL, DIMENSION(:,:), INTENT(IN) :: palbnir_soil! soil albedo
70 REAL, DIMENSION(:,:), INTENT(IN) :: palbuv_soil !
71 !
72 REAL, DIMENSION(:,:), INTENT(INOUT) :: palbvis_eco ! visible, near infra-red and UV
73 REAL, DIMENSION(:,:), INTENT(INOUT) :: palbnir_eco ! averaged albedo
74 REAL, DIMENSION(:,:), INTENT(INOUT) :: palbuv_eco !
75 REAL, DIMENSION(:,:), INTENT(IN), OPTIONAL :: pvegtype ! vegetation type
76 LOGICAL, DIMENSION(:), INTENT(IN), OPTIONAL :: omask ! mask where computations are done
77 !
78 END SUBROUTINE albedo_1d_patch
79 !
80 END INTERFACE
81 !
82 END MODULE modi_albedo
83 !
84 ! ####################################################################
85  SUBROUTINE albedo_1d(HALBEDO, &
86  palbvis_veg,palbnir_veg,palbuv_veg,pveg, &
87  palbvis_soil,palbnir_soil,palbuv_soil, &
88  palbvis_eco ,palbnir_eco, palbuv_eco, &
89  psnow, omask )
90 ! ####################################################################
91 !
92 !!**** *ALBEDO*
93 !!
94 !! PURPOSE
95 !! -------
96 ! computes the albedo of the natural continental parts, from
97 ! vegetation albedo and soil albedo.
98 ! Soil albedo is estimated from sand fraction.
99 ! A correction due to the soil humidity is used.
100 !
101 !
102 !!** METHOD
103 !! ------
104 !
105 !! EXTERNAL
106 !! --------
107 !!
108 !! IMPLICIT ARGUMENTS
109 !! ------------------
110 !!
111 !!
112 !! REFERENCE
113 !! ---------
114 !!
115 !!
116 !! AUTHOR
117 !! ------
118 !! V. Masson * Meteo-France *
119 !!
120 !! MODIFICATIONS
121 !! -------------
122 !! Original 17/12/99
123 !! 01/2004 Externalization (V. Masson)
124 !-------------------------------------------------------------------------------
125 !
126 !* 0. DECLARATIONS
127 ! ------------
128 !
129 USE modd_snow_par, ONLY : xansmax
130 !
131 !
132 USE yomhook ,ONLY : lhook, dr_hook
133 USE parkind1 ,ONLY : jprb
134 !
135 IMPLICIT NONE
136 !
137 !* 0.1 declarations of arguments
138 ! -------------------------
139 !
140  CHARACTER(LEN=*), INTENT(IN) :: halbedo
141 ! Albedo dependance wxith surface soil water content
142 ! "EVOL" = albedo evolves with soil wetness
143 ! "DRY " = constant albedo value for dry soil
144 ! "WET " = constant albedo value for wet soil
145 ! "MEAN" = constant albedo value for medium soil wetness
146 !
147 REAL, DIMENSION(:), INTENT(IN) :: palbvis_veg ! visible, near infra-red and UV
148 REAL, DIMENSION(:), INTENT(IN) :: palbnir_veg ! albedo of the vegetation
149 REAL, DIMENSION(:), INTENT(IN) :: palbuv_veg !
150 REAL, DIMENSION(:), INTENT(IN) :: pveg ! fraction of vegetation
151 REAL, DIMENSION(:), INTENT(IN) :: palbvis_soil! visible, near infra-red and UV
152 REAL, DIMENSION(:), INTENT(IN) :: palbnir_soil! soil albedo
153 REAL, DIMENSION(:), INTENT(IN) :: palbuv_soil !
154 !
155 REAL, DIMENSION(:), INTENT(INOUT) :: palbvis_eco ! visible, near infra-red and UV
156 REAL, DIMENSION(:), INTENT(INOUT) :: palbnir_eco ! averaged albedo
157 REAL, DIMENSION(:), INTENT(INOUT) :: palbuv_eco !
158 REAL, DIMENSION(:), INTENT(IN), OPTIONAL :: psnow ! fraction of permanent snow and ice
159 LOGICAL, DIMENSION(:), INTENT(IN), OPTIONAL :: omask ! mask where computations are done
160 !
161 !* 0.2 declarations of local variables
162 ! -------------------------------
163 !
164 REAL, DIMENSION(SIZE(PVEG)) :: zsnow
165 LOGICAL, DIMENSION(SIZE(PVEG)) :: gmask
166 REAL(KIND=JPRB) :: zhook_handle
167 !-------------------------------------------------------------------------------
168 !
169 IF (lhook) CALL dr_hook('MODI_ALBEDO:ALBEDO_1D',0,zhook_handle)
170 IF (halbedo=='USER' .AND. lhook) CALL dr_hook('MODI_ALBEDO:ALBEDO_1D',1,zhook_handle)
171 IF (halbedo=='USER') RETURN
172 !
173 gmask=.true.
174 IF (present(omask)) gmask=omask
175 !
176 zsnow(:) = 0.
177 IF (present(psnow)) zsnow(:) = psnow(:)
178 !
179 WHERE (gmask(:))
180  palbvis_eco(:) = ( (1.-pveg(:)) * palbvis_soil(:) &
181  + pveg(:) * palbvis_veg(:))&
182  * (1-zsnow(:)) &
183  + xansmax * zsnow(:)
184 !
185  palbnir_eco(:) = ( (1.-pveg(:)) * palbnir_soil(:) &
186  + pveg(:) * palbnir_veg(:))&
187  * (1-zsnow(:)) &
188  + xansmax * zsnow(:)
189 !
190  palbuv_eco(:) = ( (1.-pveg(:)) * palbuv_soil(:) &
191  + pveg(:) * palbuv_veg(:)) &
192  * (1-zsnow(:)) &
193  + xansmax * zsnow(:)
194 END WHERE
195 IF (lhook) CALL dr_hook('MODI_ALBEDO:ALBEDO_1D',1,zhook_handle)
196 !-------------------------------------------------------------------------------
197 !
198 END SUBROUTINE albedo_1d
199 !
200 ! ####################################################################
201  SUBROUTINE albedo_1d_patch(HALBEDO, &
202  palbvis_veg,palbnir_veg,palbuv_veg,pveg, &
203  palbvis_soil,palbnir_soil,palbuv_soil, &
204  palbvis_eco ,palbnir_eco, palbuv_eco, &
205  pvegtype, omask )
206 ! ####################################################################
207 !
208 !!**** *ALBEDO*
209 !!
210 !! PURPOSE
211 !! -------
212 ! computes the albedo of for different types (patches)
213 ! of natural continental parts, from
214 ! vegetation albedo and soil albedo.
215 ! Soil albedo is estimated from sand fraction.
216 ! A correction due to the soil humidity is used.
217 !
218 !
219 !!** METHOD
220 !! ------
221 !
222 !! EXTERNAL
223 !! --------
224 !!
225 !! IMPLICIT ARGUMENTS
226 !! ------------------
227 !!
228 !!
229 !! REFERENCE
230 !! ---------
231 !!
232 !!
233 !! AUTHOR
234 !! ------
235 !! F.Solmon / V. Masson
236 !!
237 !! MODIFICATIONS
238 !! -------------
239 !! Original
240 !! 01/2004 Externalization (V. Masson)
241 !-------------------------------------------------------------------------------
242 !
243 !* 0. DECLARATIONS
244 ! ------------
245 !
246 USE modd_data_cover_par, ONLY : nvt_snow
247 USE modd_snow_par, ONLY : xansmax
248 USE modd_surf_par, ONLY : xundef
249 !
250 USE modi_vegtype_to_patch
251 USE modi_surf_patch
252 !
253 !
254 USE yomhook ,ONLY : lhook, dr_hook
255 USE parkind1 ,ONLY : jprb
256 !
257 IMPLICIT NONE
258 !
259 !* 0.1 declarations of arguments
260 ! -------------------------
261 !
262  CHARACTER(LEN=*), INTENT(IN) :: halbedo
263 ! Albedo dependance wxith surface soil water content
264 ! "EVOL" = albedo evolves with soil wetness
265 ! "DRY " = constant albedo value for dry soil
266 ! "WET " = constant albedo value for wet soil
267 ! "MEAN" = constant albedo value for medium soil wetness
268 !
269 REAL, DIMENSION(:,:), INTENT(IN) :: palbvis_veg ! visible, near infra-red and UV
270 REAL, DIMENSION(:,:), INTENT(IN) :: palbnir_veg ! albedo of the vegetation
271 REAL, DIMENSION(:,:), INTENT(IN) :: palbuv_veg !
272 REAL, DIMENSION(:,:), INTENT(IN) :: pveg ! fraction of vegetation
273 REAL, DIMENSION(:,:), INTENT(IN) :: palbvis_soil! visible, near infra-red and UV
274 REAL, DIMENSION(:,:), INTENT(IN) :: palbnir_soil! soil albedo
275 REAL, DIMENSION(:,:), INTENT(IN) :: palbuv_soil !
276 !
277 REAL, DIMENSION(:,:), INTENT(INOUT) :: palbvis_eco ! visible, near infra-red and UV
278 REAL, DIMENSION(:,:), INTENT(INOUT) :: palbnir_eco ! averaged albedo
279 REAL, DIMENSION(:,:), INTENT(INOUT) :: palbuv_eco !
280 REAL, DIMENSION(:,:), INTENT(IN), OPTIONAL :: pvegtype ! vegetation type
281 LOGICAL, DIMENSION(:), INTENT(IN), OPTIONAL :: omask ! mask where computations are done
282 !
283 !
284 !* 0.2 declarations of local variables
285 ! -------------------------------
286 !
287 LOGICAL, DIMENSION(SIZE(PVEG,1)) :: gmask
288 !
289 REAL, DIMENSION(SIZE(PVEG,1),SIZE(PVEG,2)) ::zpatch, zsnowpatch
290 INTEGER :: isnowpatch !patch index for snow
291 INTEGER :: ipatch ! number of patches
292 INTEGER :: jpatch !loop index for patches
293 REAL(KIND=JPRB) :: zhook_handle
294 !-------------------------------------------------------------------------------
295 !
296 IF (lhook) CALL dr_hook('MODI_ALBEDO:ALBEDO_1D_PATCH',0,zhook_handle)
297 IF (halbedo=='USER' .AND. lhook) CALL dr_hook('MODI_ALBEDO:ALBEDO_1D_PATCH',1,zhook_handle)
298 IF (halbedo=='USER') RETURN
299 !
300 gmask(:) = .true.
301 IF (present(omask)) gmask(:) = omask(:)
302 !
303 ipatch = SIZE(pveg,2)
304 
305 DO jpatch=1,ipatch
306  WHERE (gmask(:))
307  palbvis_eco(:,jpatch) = xundef
308  palbnir_eco(:,jpatch) = xundef
309  palbuv_eco(:,jpatch) = xundef
310  END WHERE
311 END DO
312 !
313 !
314 !
315 zsnowpatch(:,:) =0.
316 !
317 IF (present(pvegtype)) THEN
318  ! calculation of patch surfaces (weights for average)
319  CALL surf_patch(ipatch,pvegtype,zpatch)
320  ! permanent snow fraction in the corresponding patch
321  isnowpatch= vegtype_to_patch(nvt_snow,ipatch)
322  WHERE(gmask(:) .AND. zpatch(:,isnowpatch)>0.)
323  zsnowpatch(:,isnowpatch)=pvegtype(:,nvt_snow)/zpatch(:,isnowpatch)
324  END WHERE
325 END IF
326 !
327 
328 DO jpatch=1,ipatch
329  WHERE (gmask(:) .AND. pveg(:,jpatch)/=xundef)
330 
331  palbvis_eco(:,jpatch) =( (1.-pveg(:,jpatch)) * palbvis_soil(:,jpatch) &
332  + pveg(:,jpatch) * palbvis_veg(:,jpatch)) &
333  * (1-zsnowpatch(:,jpatch)) &
334  + xansmax * zsnowpatch(:,jpatch)
335  !
336  palbnir_eco(:,jpatch) =( (1.-pveg(:,jpatch)) * palbnir_soil(:,jpatch) &
337  + pveg(:,jpatch) * palbnir_veg(:,jpatch)) &
338  * (1-zsnowpatch(:,jpatch)) &
339  + xansmax * zsnowpatch(:,jpatch)
340  !
341  palbuv_eco(:,jpatch) =( (1.-pveg(:,jpatch)) * palbuv_soil(:,jpatch) &
342  + pveg(:,jpatch) * palbuv_veg(:,jpatch)) &
343  * (1-zsnowpatch(:,jpatch)) &
344  + xansmax * zsnowpatch(:,jpatch)
345  END WHERE
346 END DO
347 IF (lhook) CALL dr_hook('MODI_ALBEDO:ALBEDO_1D_PATCH',1,zhook_handle)
348 !-------------------------------------------------------------------------------
349 !
350 END SUBROUTINE albedo_1d_patch
integer function vegtype_to_patch(IVEGTYPE, INPATCH)
subroutine albedo_1d_patch(HALBEDO, PALBVIS_VEG, PALBNIR_VEG, PALBUV_VEG, PVEG, PALBVIS_SOIL, PALBNIR_SOIL, PALBUV_SOIL, PALBVIS_ECO, PALBNIR_ECO, PALBUV_ECO, PVEGTYPE, OMASK)
Definition: albedo.F90:201
subroutine albedo_1d(HALBEDO, PALBVIS_VEG, PALBNIR_VEG, PALBUV_VEG, PVEG, PALBVIS_SOIL, PALBNIR_SOIL, PALBUV_SOIL, PALBVIS_ECO, PALBNIR_ECO, PALBUV_ECO, PSNOW, OMASK)
Definition: albedo.F90:85