SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
averaged_albedo_emis_isba.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 averaged_albedo_emis_isba (I, &
7  oflood, halbedo, &
8  pzenith,pveg,pz0,plai, &
9  omeb_patch,pgndlitter, &
10  pz0litter,plaigv, &
11  ph_veg, ptv, &
12  ptg1,ppatch, &
13  psw_bands, &
14  palbnir_veg,palbvis_veg, &
15  palbuv_veg, &
16  palbnir_soil,palbvis_soil, &
17  palbuv_soil, &
18  pemis_eco, &
19  tpsnow, &
20  palbnir_eco,palbvis_eco, &
21  palbuv_eco, &
22  pdir_alb,psca_alb, &
23  pemis,ptsrad,ptsurf, &
24  pdir_sw, psca_sw )
25 ! ###################################################
26 !
27 !!**** ** computes radiative fields used in ISBA
28 !!
29 !! PURPOSE
30 !! -------
31 !!
32 !! METHOD
33 !! ------
34 !!
35 !! EXTERNAL
36 !! --------
37 !!
38 !! IMPLICIT ARGUMENTS
39 !! ------------------
40 !!
41 !! REFERENCE
42 !! ---------
43 !!
44 !! AUTHOR
45 !! ------
46 !!
47 !! V. Masson Meteo-France
48 !!
49 !! MODIFICATION
50 !! ------------
51 !!
52 !! Original 01/2004
53 !! A. Bogatchev 09/2005 EBA snow option
54 !! B. Decharme 2008 The fraction of vegetation covered by snow must be
55 ! <= to ZSNG
56 !! B. Decharme 2013 new coupling variable and optimization
57 !! P. Samuelsson 10/2014 MEB
58 !----------------------------------------------------------------------------
59 !
60 !* 0. DECLARATION
61 ! -----------
62 !
63 !
64 USE modd_isba_n, ONLY : isba_t
65 !
66 USE modd_surf_par, ONLY : xundef
67 !
69 !
70 USE modd_csts, ONLY : xstefan
71 USE mode_meb, ONLY : mebpalphan
72 !
73 USE modi_albedo
74 USE modi_average_rad
75 USE modi_update_rad_isba_n
76 USE modi_isba_lwnet_meb
77 !
78 !
79 USE yomhook ,ONLY : lhook, dr_hook
80 USE parkind1 ,ONLY : jprb
81 !
82 IMPLICIT NONE
83 !
84 !* 0.1 Declaration of arguments
85 ! ------------------------
86 !
87 !
88 TYPE(isba_t), INTENT(INOUT) :: i
89 !
90 LOGICAL, INTENT(IN) :: oflood
91  CHARACTER(LEN=4), INTENT(IN) :: halbedo ! albedo type
92 ! Albedo dependance with surface soil water content
93 ! "EVOL" = albedo evolves with soil wetness
94 ! "DRY " = constant albedo value for dry soil
95 ! "WET " = constant albedo value for wet soil
96 ! "MEAN" = constant albedo value for medium soil wetness
97 !
98 REAL, DIMENSION(:,:), INTENT(IN) :: pveg ! vegetation fraction
99 REAL, DIMENSION(:,:), INTENT(IN) :: pz0 ! roughness length
100 REAL, DIMENSION(:,:), INTENT(IN) :: plai ! leaf area index
101 LOGICAL, DIMENSION(:), INTENT(IN) :: omeb_patch ! multi-energy balance logical vector
102 REAL, DIMENSION(:,:), INTENT(IN) :: pgndlitter ! Ground litter fraction
103 REAL, DIMENSION(:,:), INTENT(IN) :: plaigv ! Understory leaf area index
104 REAL, DIMENSION(:,:), INTENT(IN) :: pz0litter ! Ground litter roughness length
105 REAL, DIMENSION(:,:), INTENT(IN) :: ph_veg ! Height of vegetation
106 REAL, DIMENSION(:,:), INTENT(IN) :: ptv ! canopy vegetation temperature
107 REAL, DIMENSION(:,:), INTENT(IN) :: ptg1 ! soil surface temperature
108 REAL, DIMENSION(:,:), INTENT(IN) :: ppatch ! tile fraction
109 REAL, DIMENSION(:), INTENT(IN) :: psw_bands ! middle wavelength of each band
110 REAL, DIMENSION(:), INTENT(IN) :: pzenith
111 
112 REAL, DIMENSION(:,:), INTENT(IN) :: palbnir_veg ! near-infra-red albedo of vegetation
113 REAL, DIMENSION(:,:), INTENT(IN) :: palbvis_veg ! visible albedo of vegetation
114 REAL, DIMENSION(:,:), INTENT(IN) :: palbuv_veg ! UV albedo of vegetation
115 REAL, DIMENSION(:,:), INTENT(IN) :: palbnir_soil! near-infra-red albedo of soil
116 REAL, DIMENSION(:,:), INTENT(IN) :: palbvis_soil! visible albedo of soil
117 REAL, DIMENSION(:,:), INTENT(IN) :: palbuv_soil ! UV albedo of soil
118 REAL, DIMENSION(:,:), INTENT(IN) :: pemis_eco ! emissivity (soil+vegetation)
119 TYPE(surf_snow), INTENT(IN) :: tpsnow ! prognostic snow cover
120 !
121 REAL, DIMENSION(:,:), INTENT(OUT) :: palbnir_eco ! near-infra-red albedo (soil+vegetation)
122 REAL, DIMENSION(:,:), INTENT(OUT) :: palbvis_eco ! visible albedo (soil+vegetation)
123 REAL, DIMENSION(:,:), INTENT(OUT) :: palbuv_eco ! UV albedo (soil+vegetation)
124 !
125 REAL, DIMENSION(:,:), INTENT(OUT) :: pdir_alb ! averaged direct albedo (per wavelength)
126 REAL, DIMENSION(:,:), INTENT(OUT) :: psca_alb ! averaged diffuse albedo (per wavelength)
127 REAL, DIMENSION(:), INTENT(OUT) :: pemis ! averaged emissivity
128 REAL, DIMENSION(:), INTENT(OUT) :: ptsrad ! averaged radiaitve temp.
129 REAL, DIMENSION(:), INTENT(OUT) :: ptsurf ! surface effective temperature (K)
130 !
131 REAL, DIMENSION(:,:), INTENT(IN), OPTIONAL :: pdir_sw ! Downwelling direct SW radiation
132 REAL, DIMENSION(:,:), INTENT(IN), OPTIONAL :: psca_sw ! Downwelling diffuse SW radiation
133 !
134 !
135 !* 0.2 Declaration of local variables
136 ! ------------------------------
137 !
138 !
139 REAL, DIMENSION(SIZE(PALBNIR_VEG,1),SIZE(PSW_BANDS),SIZE(PALBVIS_VEG,2)) :: zdir_alb_patch
140 ! ! direct albedo
141 REAL, DIMENSION(SIZE(PALBNIR_VEG,1),SIZE(PSW_BANDS),SIZE(PALBVIS_VEG,2)) :: zsca_alb_patch
142 ! ! diffuse albedo
143 REAL, DIMENSION(SIZE(PEMIS_ECO, 1),SIZE(PALBVIS_VEG,2)) :: zemis_patch ! emissivity with snow-flood
144 REAL, DIMENSION(SIZE(PEMIS_ECO, 1),SIZE(PALBVIS_VEG,2)) :: ztsrad_patch ! Tsrad
145 REAL, DIMENSION(SIZE(PEMIS_ECO, 1),SIZE(PALBVIS_VEG,2)) :: ztsurf_patch ! Tsurf
146 REAL, DIMENSION(SIZE(PEMIS_ECO, 1)) :: zemis ! emissivity with flood
147 !
148 REAL, DIMENSION(SIZE(PEMIS_ECO, 1)) :: zsnowdepth ! Total snow depth
149 REAL, DIMENSION(SIZE(PEMIS_ECO, 1)) :: zpalphan ! Snow/canopy ratio factor
150 REAL, DIMENSION(SIZE(PEMIS_ECO, 1)) :: zlw_rad ! Fake downwelling LW rad
151 REAL, DIMENSION(SIZE(PEMIS_ECO, 1)) :: zlw_up ! Upwelling LW rad
152 REAL, DIMENSION(SIZE(PEMIS_ECO, 1)) :: zlwnet_n ! LW net for snow surface
153 REAL, DIMENSION(SIZE(PEMIS_ECO, 1)) :: zlwnet_v ! LW net for canopy veg
154 REAL, DIMENSION(SIZE(PEMIS_ECO, 1)) :: zlwnet_g ! LW net for ground
155 REAL, DIMENSION(SIZE(PEMIS_ECO, 1)) :: zdummy
156 REAL, DIMENSION(SIZE(PEMIS_ECO, 1)) :: zemisf
157 REAL, DIMENSION(SIZE(PEMIS_ECO, 1)) :: zff
158 !
159 LOGICAL :: lexplicit_snow ! snow scheme key
160 !
161 INTEGER :: inp, ini
162 INTEGER :: jp, ji ! loop on patches
163 INTEGER :: jpatch ! loop on patches
164 !
165 REAL(KIND=JPRB) :: zhook_handle
166 !-------------------------------------------------------------------------------
167 !
168 !* 0. Init
169 ! ----
170 !
171 IF (lhook) CALL dr_hook('AVERAGED_ALBEDO_EMIS_ISBA',0,zhook_handle)
172 !
173 ini=SIZE(ppatch,1)
174 inp=SIZE(ppatch,2)
175 !
176 pdir_alb(:,:)=0.
177 psca_alb(:,:)=0.
178 pemis(:) =0.
179 ptsrad(:) =0.
180 ptsurf(:) =0.
181 !
182 zdir_alb_patch(:,:,:)=0.
183 zsca_alb_patch(:,:,:)=0.
184 zemis_patch(:,: )=0.
185 !
186 lexplicit_snow = (tpsnow%SCHEME=='3-L'.OR.tpsnow%SCHEME=='CRO')
187 !
188 ztsrad_patch(:,:) = ptg1(:,:)
189 ztsurf_patch(:,:) = ptg1(:,:)
190 !
191 !
192 !* 1. averaged albedo on natural continental surfaces (except prognostic snow)
193 ! -----------------------------------------------
194 !
195  CALL albedo(halbedo, &
196  palbvis_veg,palbnir_veg,palbuv_veg,pveg, &
197  palbvis_soil,palbnir_soil,palbuv_soil, &
198  palbvis_eco,palbnir_eco,palbuv_eco )
199 
200 !
201 !* 2. averaged albedo and emis. on natural continental surfaces (with prognostic snow)
202 ! ---------------------------------------------------------
203 !
204 ! A dummy downwelling LW radiation can be used for calculation of radiative surface temp
205 !
206 zlw_rad(:) = 300.0
207 !
208 !* Initialization of albedo for each wavelength, emissivity and snow/flood fractions
209 !
210 IF(present(pdir_sw))THEN
211 !
212 ! For the case when MEB patch albedo is requested downweeling SW is needed
213 !
214  CALL update_rad_isba_n(i, &
215  oflood, tpsnow%SCHEME,pzenith,psw_bands,pveg,plai,pz0, &
216  omeb_patch,plaigv,pgndlitter,pz0litter, ph_veg, &
217  palbnir_eco,palbvis_eco,palbuv_eco,pemis_eco, &
218  zdir_alb_patch,zsca_alb_patch,zemis_patch, &
219  pdir_sw, psca_sw, &
220  palbnir_veg, palbnir_soil, &
221  palbvis_veg, palbvis_soil )
222 ELSE
223 !
224 ! For cases when MEB patch albedo is not requested no downweeling SW is needed
225 !
226  CALL update_rad_isba_n(i, &
227  oflood, tpsnow%SCHEME,pzenith,psw_bands,pveg,plai,pz0, &
228  omeb_patch,plaigv,pgndlitter,pz0litter, ph_veg, &
229  palbnir_eco,palbvis_eco,palbuv_eco,pemis_eco, &
230  zdir_alb_patch,zsca_alb_patch,zemis_patch )
231 ENDIF
232 !
233 !
234 !* radiative surface temperature
235 !
236 DO jpatch=1,SIZE(palbvis_veg,2)
237 !
238  IF(omeb_patch(jpatch))THEN ! MEB patches
239 !
240 ! ZPALPHAN is needed as input to ISBA_LWNET_MEB
241 !
242  zsnowdepth(:) = sum(tpsnow%WSNOW(:,:,jpatch)/tpsnow%RHO(:,:,jpatch),2)
243  zpalphan(:) = mebpalphan(zsnowdepth,ph_veg(:,jpatch))
244 !
245 ! ZLWNET_N,ZLWNET_V,ZLWNET_G are needed for ZLW_UP and ZTSRAD_PATCH
246 !
247  IF(oflood)THEN
248  zemisf(:) = i%XEMISF(:,jpatch)
249  zff(:) = i%XFF (:,jpatch)
250  ELSE
251  zemisf(:) = xundef
252  zff(:) = 0.0
253  ENDIF
254 !
255  CALL isba_lwnet_meb(plai(:,jpatch),i%XPSN(:,jpatch),zpalphan, &
256  tpsnow%EMIS(:,jpatch),zemisf(:),zff(:), &
257  ptv(:,jpatch),ptg1(:,jpatch),tpsnow%TS(:,jpatch), &
258  zlw_rad,zlwnet_n,zlwnet_v,zlwnet_g, &
259  zdummy,zdummy,zdummy, &
260  zdummy,zdummy,zdummy, &
261  zdummy,zdummy,zdummy, &
262  zdummy,zdummy,zdummy )
263 !
264  zlw_up(:) = zlw_rad(:) - (zlwnet_v(:) + zlwnet_g(:) + zlwnet_n(:))
265 !
266 ! MEB patch radiative temperature
267 !
268  WHERE (zemis_patch(:,jpatch)/=0.)
269  ztsrad_patch(:,jpatch) = ((zlw_up(:) - zlw_rad(:)*(1.0-zemis_patch(:,jpatch)))/ &
270  (xstefan*zemis_patch(:,jpatch)))**0.25
271  END WHERE
272 !
273  ELSE ! Non-MEB patches
274 
275  zemis(:) = pemis_eco(:,jpatch)
276 !
277  IF(oflood.AND.lexplicit_snow)THEN
278  WHERE(i%XPSN(:,jpatch)<1.0.AND.pemis_eco(:,jpatch)/=xundef)
279  zemis(:) = ((1.-i%XFF(:,jpatch)-i%XPSN(:,jpatch))*pemis_eco(:,jpatch) + i%XFF(:,jpatch)*i%XEMISF(:,jpatch)) &
280  /(1.-i%XPSN(:,jpatch))
281  ENDWHERE
282  ENDIF
283 !
284  IF (.NOT.lexplicit_snow) THEN
285  ztsrad_patch(:,jpatch) = ptg1(:,jpatch)
286  ELSE IF (lexplicit_snow) THEN
287  WHERE (pemis_eco(:,jpatch)/=xundef .AND. zemis_patch(:,jpatch)/=0.)
288  ztsrad_patch(:,jpatch) =( ( (1.-i%XPSN(:,jpatch))*zemis(:) *ptg1(:,jpatch)**4 &
289  + i%XPSN(:,jpatch) *tpsnow%EMIS(:,jpatch)*tpsnow%TS(:,jpatch)**4 ) )**0.25 &
290  / zemis_patch(:,jpatch)**0.25
291  END WHERE
292  END IF
293  ENDIF
294 END DO
295 !
296 !* averaged radiative fields
297 !
298  CALL average_rad(ppatch, &
299  zdir_alb_patch, zsca_alb_patch, zemis_patch, ztsrad_patch, &
300  pdir_alb, psca_alb, pemis, ptsrad )
301 !
302 !* averaged effective temperature
303 !
304 IF(lexplicit_snow)THEN
305  ztsurf_patch(:,:) = ptg1(:,:)*(1.-i%XPSN(:,:)) + tpsnow%TS(:,:)*i%XPSN(:,:)
306 ENDIF
307 !
308 DO jp=1,inp
309  DO ji=1,ini
310  ptsurf(ji) = ptsurf(ji) + ppatch(ji,jp) * ztsurf_patch(ji,jp)
311  ENDDO
312 ENDDO
313 !
314 IF (lhook) CALL dr_hook('AVERAGED_ALBEDO_EMIS_ISBA',1,zhook_handle)
315 !
316 !-------------------------------------------------------------------------------
317 !
318 END SUBROUTINE averaged_albedo_emis_isba
subroutine update_rad_isba_n(I, OFLOOD, HSNOW, PZENITH, PSW_BANDS, PVEG, PLAI, PZ0, OMEB_PATCH, PLAIGV, PGNDLITTER, PZ0LITTER, PH_VEG, PALBNIR, PALBVIS, PALBUV, PEMIS, PDIR_ALB_WITH_SNOW, PSCA_ALB_WITH_SNOW, PEMIST, PDIR_SW, PSCA_SW, PALBNIR_VEG, PALBNIR_SOIL, PALBVIS_VEG, PALBVIS_SOIL)
subroutine isba_lwnet_meb(PLAI, PPSN, PPSNA, PEMIS_N, PEMIS_F, PFF, PTV, PTG, PTN, PLW_RAD, PLWNET_N, PLWNET_V, PLWNET_G, PLWNET_V_DTV, PLWNET_V_DTG, PLWNET_V_DTN, PLWNET_G_DTV, PLWNET_G_DTG, PLWNET_G_DTN, PLWNET_N_DTV, PLWNET_N_DTG, PLWNET_N_DTN, PSIGMA_F, PSIGMA_FN, PLWDOWN_GN)
subroutine average_rad(PFRAC_TILE, PDIR_ALB_TILE, PSCA_ALB_TILE, PEMIS_TILE, PTRAD_TILE, PDIR_ALB, PSCA_ALB, PEMIS, PTRAD)
Definition: average_rad.F90:6
subroutine averaged_albedo_emis_isba(I, OFLOOD, HALBEDO, PZENITH, PVEG, PZ0, PLAI, OMEB_PATCH, PGNDLITTER, PZ0LITTER, PLAIGV, PH_VEG, PTV, PTG1, PPATCH, PSW_BANDS, PALBNIR_VEG, PALBVIS_VEG, PALBUV_VEG, PALBNIR_SOIL, PALBVIS_SOIL, PALBUV_SOIL, PEMIS_ECO, TPSNOW, PALBNIR_ECO, PALBVIS_ECO, PALBUV_ECO, PDIR_ALB, PSCA_ALB, PEMIS, PTSRAD, PTSURF, PDIR_SW, PSCA_SW)