7 oflood,hsnow,pzenith,psw_bands,pveg,plai,pz0, &
8 omeb_patch,plaigv,pgndlitter,pz0litter, ph_veg, &
9 palbnir,palbvis,palbuv,pemis, &
10 pdir_alb_with_snow,psca_alb_with_snow,pemist, &
12 palbnir_veg, palbnir_soil, &
13 palbvis_veg, palbvis_soil )
51 USE modd_snow_par, ONLY : xrhosmin_es,xrhosmax_es,xsnowdmin,xemissn
52 USE modd_water_par, ONLY : xalbsca_wat, xemiswat, xalbwatice, xemiswatice
60 USE modi_albedo_from_nir_vis
63 USE modi_isba_snow_frac
64 USE modi_isba_emis_meb
65 USE modi_radiative_transfert
68 USE yomhook
,ONLY : lhook, dr_hook
69 USE parkind1
,ONLY : jprb
76 TYPE(isba_t
),
INTENT(INOUT) :: i
78 LOGICAL,
INTENT(IN) :: oflood
79 CHARACTER(LEN=*),
INTENT(IN) :: hsnow
81 REAL,
DIMENSION(:),
INTENT(IN) :: pzenith
82 REAL,
DIMENSION(:),
INTENT(IN) :: psw_bands
83 REAL,
DIMENSION(:,:),
INTENT(IN) :: pveg
84 REAL,
DIMENSION(:,:),
INTENT(IN) :: plai
85 REAL,
DIMENSION(:,:),
INTENT(IN) :: pz0
86 REAL,
DIMENSION(:,:),
INTENT(IN) :: palbnir
87 REAL,
DIMENSION(:,:),
INTENT(IN) :: palbvis
88 REAL,
DIMENSION(:,:),
INTENT(IN) :: palbuv
89 REAL,
DIMENSION(:,:),
INTENT(IN) :: pemis
90 LOGICAL,
DIMENSION(:),
INTENT(IN) :: omeb_patch
91 REAL,
DIMENSION(:,:),
INTENT(IN) :: pgndlitter
92 REAL,
DIMENSION(:,:),
INTENT(IN) :: plaigv
93 REAL,
DIMENSION(:,:),
INTENT(IN) :: pz0litter
94 REAL,
DIMENSION(:,:),
INTENT(IN) :: ph_veg
96 REAL,
DIMENSION(:,:,:),
INTENT(OUT) :: pdir_alb_with_snow
97 REAL,
DIMENSION(:,:,:),
INTENT(OUT) :: psca_alb_with_snow
98 REAL,
DIMENSION(:,:),
INTENT(OUT) :: pemist
100 REAL,
DIMENSION(:,:),
INTENT(IN),
OPTIONAL :: pdir_sw
101 REAL,
DIMENSION(:,:),
INTENT(IN),
OPTIONAL :: psca_sw
102 REAL,
DIMENSION(:,:),
INTENT(IN),
OPTIONAL :: palbnir_veg
103 REAL,
DIMENSION(:,:),
INTENT(IN),
OPTIONAL :: palbnir_soil
104 REAL,
DIMENSION(:,:),
INTENT(IN),
OPTIONAL :: palbvis_veg
105 REAL,
DIMENSION(:,:),
INTENT(IN),
OPTIONAL :: palbvis_soil
109 REAL,
DIMENSION(SIZE(I%XVEGTYPE,1),SIZE(I%XVEGTYPE,2)) :: zvegtype
111 INTEGER :: jpatch, iswb, jj
112 REAL(KIND=JPRB) :: zhook_handle
118 IF (lhook) CALL dr_hook(
'UPDATE_RAD_ISBA_N',0,zhook_handle)
119 iswb =
SIZE(psw_bands)
125 DO jj=1,i%NSIZE_NATURE_P(jpatch)
126 zvegtype(jj,jpatch) = i%XVEGTYPE(i%NR_NATURE_P(jj,jpatch),jpatch)
135 IF(i%NSIZE_NATURE_P(jpatch)>0) CALL
treat_nature(i%NSIZE_NATURE_P(jpatch),jpatch)
142 pdir_alb_with_snow(:,:,:)=i%XDIR_ALB_WITH_SNOW (:,:,:)
143 psca_alb_with_snow(:,:,:)=i%XSCA_ALB_WITH_SNOW (:,:,:)
145 IF (lhook) CALL dr_hook(
'UPDATE_RAD_ISBA_N',1,zhook_handle)
153 INTEGER,
INTENT(IN) :: ksize
154 INTEGER,
INTENT(IN) :: kpatch
157 INTEGER,
DIMENSION(KSIZE) :: imask
159 REAL,
DIMENSION(KSIZE,SIZE(I%TSNOW%WSNOW,2)) :: zlayerswe
160 REAL,
DIMENSION(KSIZE,SIZE(I%TSNOW%WSNOW,2)) :: zlayerrho
161 REAL,
DIMENSION(KSIZE,SIZE(I%TSNOW%WSNOW,2)) :: zlayerage
163 REAL,
DIMENSION(KSIZE,ISWB) :: zdir_alb_with_snow
164 REAL,
DIMENSION(KSIZE,ISWB) :: zsca_alb_with_snow
166 REAL,
DIMENSION(KSIZE) :: zsnowalb
167 REAL,
DIMENSION(KSIZE) :: zsnowalbvis
168 REAL,
DIMENSION(KSIZE) :: zsnowalbnir
169 REAL,
DIMENSION(KSIZE) :: zlai
171 REAL,
DIMENSION(KSIZE) :: zz0
172 REAL,
DIMENSION(KSIZE) :: zveg
173 REAL,
DIMENSION(KSIZE) :: zemis
174 REAL,
DIMENSION(KSIZE) :: zalbnir
175 REAL,
DIMENSION(KSIZE) :: zalbvis
176 REAL,
DIMENSION(KSIZE) :: zalbuv
177 REAL,
DIMENSION(KSIZE) :: zalbnir_veg
178 REAL,
DIMENSION(KSIZE) :: zalbnir_soil
179 REAL,
DIMENSION(KSIZE) :: zalbvis_veg
180 REAL,
DIMENSION(KSIZE) :: zalbvis_soil
182 REAL,
DIMENSION(KSIZE) :: zpsn
183 REAL,
DIMENSION(KSIZE) :: zpsnv_a
184 REAL,
DIMENSION(KSIZE) :: zpsng
185 REAL,
DIMENSION(KSIZE) :: zpsnv
187 REAL,
DIMENSION(KSIZE) :: zalbf
188 REAL,
DIMENSION(KSIZE) :: zalbf_dir
189 REAL,
DIMENSION(KSIZE) :: zalbf_sca
190 REAL,
DIMENSION(KSIZE) :: zemisf
191 REAL,
DIMENSION(KSIZE) :: zff
193 REAL,
DIMENSION(KSIZE) :: zalbnir_with_snow
194 REAL,
DIMENSION(KSIZE) :: zalbvis_with_snow
195 REAL,
DIMENSION(KSIZE) :: zalbuv_with_snow
197 REAL,
DIMENSION(KSIZE) :: zemist
198 REAL,
DIMENSION(KSIZE) :: zzenith
199 REAL,
DIMENSION(KSIZE) :: zh_veg
200 REAL,
DIMENSION(KSIZE) :: zsnowdepth, zpalphan
201 REAL,
DIMENSION(KSIZE) :: zswup
202 REAL,
DIMENSION(KSIZE) :: zglobal_sw
203 REAL,
DIMENSION(KSIZE) :: zalbt
204 REAL,
DIMENSION(KSIZE) :: zpsna, zsigma_f, zsigma_fn, zemissn
205 REAL,
DIMENSION(KSIZE,ISWB) :: zdir_sw, zsca_sw
206 REAL,
DIMENSION(KSIZE) :: zpermsnowfrac, zdsgrain
207 REAL,
DIMENSION(KSIZE,3) :: zspectralalbedo
209 REAL,
DIMENSION(KSIZE) :: zlain, zalbvis_tsoil, zalbnir_tsoil
210 REAL,
DIMENSION(KSIZE) :: zfapir, zfapar, zfapir_bs, zfapar_bs
211 REAL,
DIMENSION(KSIZE,SIZE(I%XABC)) :: ziacan_sunlit, ziacan_shade, zfrac_sun, ziacan
212 REAL,
DIMENSION(KSIZE) :: zfaparc, zfapirc, zmus, zlai_effc
213 LOGICAL,
DIMENSION(KSIZE) :: gshade
215 REAL,
PARAMETER :: zput0 = 0.0
217 REAL(KIND=JPRB) :: zhook_handle
219 IF (lhook) CALL dr_hook(
'UPDATE_RAD_ISBA_N:TREAT_NATURE',0,zhook_handle)
221 imask(:)=i%NR_NATURE_P(1:ksize,kpatch)
223 CALL
pack_same_rank(imask(:),i%TSNOW%WSNOW(:,:,kpatch),zlayerswe(:,:))
224 CALL
pack_same_rank(imask(:),i%TSNOW%RHO (:,:,kpatch),zlayerrho(:,:))
228 IF(omeb_patch(kpatch))
THEN
251 IF(present(pdir_sw))
THEN
255 CALL
pack_same_rank(imask(:),palbnir_veg(:,kpatch),zalbnir_veg(:))
256 CALL
pack_same_rank(imask(:),palbnir_soil(:,kpatch),zalbnir_soil(:))
257 CALL
pack_same_rank(imask(:),palbvis_veg(:,kpatch),zalbvis_veg(:))
258 CALL
pack_same_rank(imask(:),palbvis_soil(:,kpatch),zalbvis_soil(:))
260 CALL
pack_same_rank(imask(:),i%TSNOW%AGE (:,:,kpatch),zlayerage(:,:))
262 CALL
pack_same_rank(imask(:),i%XVEGTYPE_PATCH(:,nvt_snow,kpatch),zpermsnowfrac(:))
283 IF (hsnow==
'3-L' .OR. hsnow==
'CRO')
THEN
284 CALL
pack_same_rank(imask(:),i%TSNOW%ALBVIS (:,kpatch),zsnowalbvis(:))
285 CALL
pack_same_rank(imask(:),i%TSNOW%ALBNIR (:,kpatch),zsnowalbnir(:))
291 zveg, zlai, zz0,zpsn(:), zpsnv_a(:), zpsng(:), zpsnv(:) )
293 IF ( hsnow==
'EBA' ) CALL
unpack_same_rank(imask(:),zpsnv_a(:),i%XPSNV_A(:,kpatch),zput0)
300 CALL
treat_flood(ksize,kpatch,imask,zpsng,zpsnv,zlai,zveg,&
301 zalbf, zalbf_dir,zalbf_sca,zemisf,zff)
311 zspectralalbedo(:,:) = 0.
312 zpermsnowfrac(:) = 0.
314 IF(omeb_patch(kpatch))
THEN
316 zsnowdepth(:) = sum(zlayerswe(:,:)/zlayerrho(:,:),2)
319 zdir_alb_with_snow(:,:)=xundef
320 zsca_alb_with_snow(:,:)=xundef
322 IF(present(pdir_sw))
THEN
334 zpermsnowfrac(:) = 0.
336 zspectralalbedo(:,1) = zsnowalbvis(:)
337 zspectralalbedo(:,2) = zsnowalbnir(:)
338 zspectralalbedo(:,3) = xundef
341 zglobal_sw(:) = zdir_sw(:,jswb) + zsca_sw(:,jswb)
343 WHERE(zsnowalb(:)/=xundef .AND. zsnowalbvis(:)/=xundef .AND. zsnowalbnir(:)/=xundef)
344 zlain(:) = zlai(:)*(1.0-zpalphan(:))
345 zalbvis_tsoil(:) = zalbvis_soil(:)*(1.-zpsn(:)) + zpsn(:)*zsnowalbvis(:)
346 zalbnir_tsoil(:) = zalbnir_soil(:)*(1.-zpsn(:)) + zpsn(:)*zsnowalbnir(:)
349 zalbvis_tsoil(:) = zalbvis_soil(:)
350 zalbnir_tsoil(:) = zalbnir_soil(:)
354 zalbvis_veg, zalbvis_tsoil, zalbnir_veg, zalbnir_tsoil, &
355 zglobal_sw, zlain, zzenith, i%XABC, &
356 zfaparc, zfapirc, zmus, zlai_effc, gshade, ziacan, &
357 ziacan_sunlit, ziacan_shade, zfrac_sun, &
358 zfapar, zfapir, zfapar_bs, zfapir_bs )
364 zalbt(:) = 1. - (xsw_wght_vis*(zfapar(:)+zfapar_bs(:)) + &
365 xsw_wght_nir*(zfapir(:)+zfapir_bs(:)))
366 zswup(:) = zglobal_sw(:)*zalbt(:)
367 zalbt(:) = zswup(:)/max(1.e-5, zglobal_sw(:))
369 zdir_alb_with_snow(:,jswb)=zalbt(:)
370 zsca_alb_with_snow(:,jswb)=zalbt(:)
391 zalbnir_with_snow(:) = zalbnir(:) * (1.-zpsn(:)-zff(:)) + zsnowalb(:) * zpsn(:)
392 zalbvis_with_snow(:) = zalbvis(:) * (1.-zpsn(:)-zff(:)) + zsnowalb(:) * zpsn(:)
393 zalbuv_with_snow(:) = zalbuv(:) * (1.-zpsn(:)-zff(:)) + zsnowalb(:) * zpsn(:)
398 zalbnir_with_snow, zalbvis_with_snow, zalbuv_with_snow,&
399 zdir_alb_with_snow, zsca_alb_with_snow )
402 zdir_alb_with_snow(:,jswb)=zdir_alb_with_snow(:,jswb) + zff(:)*zalbf_dir(:)
403 zsca_alb_with_snow(:,jswb)=zsca_alb_with_snow(:,jswb) + zff(:)*zalbf_sca(:)
410 zemist(:) = (1.-zpsn(:)-zff(:))*zemis(:) + zpsn(:) * xemissn + zff(:)*zemisf(:)
422 CALL
unpack_same_rank(imask(:),zdir_alb_with_snow(:,:),i%XDIR_ALB_WITH_SNOW (:,:,kpatch),zput0)
423 CALL
unpack_same_rank(imask(:),zsca_alb_with_snow(:,:),i%XSCA_ALB_WITH_SNOW (:,:,kpatch),zput0)
426 IF (lhook) CALL dr_hook(
'UPDATE_RAD_ISBA_N:TREAT_NATURE',1,zhook_handle)
431 palbf, palbf_dir,palbf_sca,pemisf,pff)
435 INTEGER,
INTENT(IN) :: ksize
436 INTEGER,
INTENT(IN) :: kpatch
437 INTEGER,
DIMENSION(:),
INTENT(IN) :: kmask
438 REAL,
DIMENSION(:),
INTENT(IN) :: ppsng
439 REAL,
DIMENSION(:),
INTENT(IN) :: ppsnv
440 REAL,
DIMENSION(:),
INTENT(IN) :: plai
441 REAL,
DIMENSION(:),
INTENT(IN) :: pveg
442 REAL,
DIMENSION(:),
INTENT(OUT) :: palbf_dir
443 REAL,
DIMENSION(:),
INTENT(OUT) :: palbf_sca
444 REAL,
DIMENSION(:),
INTENT(OUT) :: palbf
445 REAL,
DIMENSION(:),
INTENT(OUT) :: pemisf
446 REAL,
DIMENSION(:),
INTENT(OUT) :: pff
448 REAL,
DIMENSION(KSIZE) :: ztg
449 REAL,
DIMENSION(KSIZE) :: zzenith
450 REAL,
DIMENSION(KSIZE) :: zfflood
451 REAL,
DIMENSION(KSIZE) :: zffg
452 REAL,
DIMENSION(KSIZE) :: zffv
453 REAL,
DIMENSION(KSIZE) :: zffrozen
454 REAL,
DIMENSION(KSIZE) :: zalbedo
456 REAL,
PARAMETER :: zput0 = 0.0
457 REAL(KIND=JPRB) :: zhook_handle
459 IF (lhook) CALL dr_hook(
'UPDATE_RAD_ISBA_N:TREAT_FLOOD',0,zhook_handle)
472 palbf_dir(:) = xundef
473 palbf_sca(:) = xundef
479 palbf_dir(:) = zalbedo(:)
480 palbf_sca(:) = xalbsca_wat
484 palbf_dir(:) = xalbwatice
485 palbf_sca(:) = xalbwatice
486 pemisf(:) = xemiswatice
489 palbf(:)=0.5*(palbf_dir(:)+palbf_sca(:))
499 IF (lhook) CALL dr_hook(
'UPDATE_RAD_ISBA_N:TREAT_FLOOD',1,zhook_handle)
subroutine treat_flood(KSIZE, KPATCH, KMASK, PPSNG, PPSNV, PLAI, PVEG, PALBF, PALBF_DIR, PALBF_SCA, PEMISF, PFF)
subroutine treat_nature(KSIZE, KPATCH)
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)
real function, dimension(size(pveg)) flood_frac_nat(PVEG, PFFG, PFFV, PFFLOOD)
real function, dimension(size(pzenith)) albedo_ta96(PZENITH)
real function, dimension(size(ppsng)) flood_frac_ground(PPSNG, PFFLOOD)
subroutine albedo_from_nir_vis(PSW_BANDS, PALBNIR, PALBVIS, PALBUV, PDIR_ALB, PSCA_ALB)
subroutine isba_emis_meb(PPSN, PPSNA, PSIGMA_F, PSIGMA_FN, PEMIS_N, PEMIS)
real function, dimension(size(ppsnv)) flood_frac_veg(PLAI, PPSNV, PFFLOOD)
subroutine radiative_transfert(OAGRI_TO_GRASS, PVEGTYPE, PALBVIS_VEG, PALBVIS_SOIL, PALBNIR_VEG, PALBNIR_SOIL, PSW_RAD, PLAI, PZENITH, PABC, PFAPARC, PFAPIRC, PMUS, PLAI_EFFC, OSHADE, PIACAN, PIACAN_SUNLIT, PIACAN_SHADE, PFRAC_SUN, PFAPAR, PFAPIR, PFAPAR_BS, PFAPIR_BS)
subroutine isba_snow_frac(HSNOW, PWSNOW, PRSNOW, PASNOW, PVEG, PLAI, PZ0, PPSN, PPSNV_A, PPSNG, PPSNV)