7 PDIR_ALB_WITH_SNOW,PSCA_ALB_WITH_SNOW, PEMIST, &
45 USE modd_snow_par
, ONLY : xrhosmin_es,xrhosmax_es,xsnowdmin,xemissn
54 USE modi_albedo_from_nir_vis
57 USE modi_isba_snow_frac
58 USE modi_isba_emis_meb
59 USE modi_radiative_transfert
76 INTEGER,
INTENT(IN) :: KPATCH
78 REAL,
DIMENSION(:),
INTENT(IN) :: PZENITH
79 REAL,
DIMENSION(:),
INTENT(IN) :: PSW_BANDS
81 REAL,
DIMENSION(:,:),
INTENT(OUT) :: PDIR_ALB_WITH_SNOW
82 REAL,
DIMENSION(:,:),
INTENT(OUT) :: PSCA_ALB_WITH_SNOW
83 REAL,
DIMENSION(:),
INTENT(OUT) :: PEMIST
85 REAL,
DIMENSION(:,:),
INTENT(IN),
OPTIONAL :: PDIR_SW
86 REAL,
DIMENSION(:,:),
INTENT(IN),
OPTIONAL :: PSCA_SW
90 REAL,
DIMENSION(PK%NSIZE_P) :: ZVEG
91 REAL,
DIMENSION(PK%NSIZE_P) :: ZPSNV_A
92 REAL,
DIMENSION(PK%NSIZE_P) :: ZALBF_DIR
93 REAL,
DIMENSION(PK%NSIZE_P) :: ZALBF_SCA
94 REAL,
DIMENSION(PK%NSIZE_P) :: ZEMISF
95 REAL,
DIMENSION(PK%NSIZE_P) :: ZFF
96 REAL,
DIMENSION(PK%NSIZE_P) :: ZALBNIR_WITH_SNOW
97 REAL,
DIMENSION(PK%NSIZE_P) :: ZALBVIS_WITH_SNOW
98 REAL,
DIMENSION(PK%NSIZE_P) :: ZALBUV_WITH_SNOW
99 REAL,
DIMENSION(PK%NSIZE_P) :: ZZENITH
100 REAL,
DIMENSION(PK%NSIZE_P) :: ZSNOWDEPTH, ZPALPHAN
101 REAL,
DIMENSION(PK%NSIZE_P) :: ZSWUP
102 REAL,
DIMENSION(PK%NSIZE_P) :: ZGLOBAL_SW
103 REAL,
DIMENSION(PK%NSIZE_P) :: ZALBT, ZEMIST
104 REAL,
DIMENSION(PK%NSIZE_P) :: ZPSNA, ZSIGMA_F, ZSIGMA_FN, ZEMISSN
105 REAL,
DIMENSION(PK%NSIZE_P,SIZE(PSW_BANDS)) :: ZDIR_SW, ZSCA_SW
106 REAL,
DIMENSION(PK%NSIZE_P) :: ZLAIN, ZALBVIS_TSOIL, ZALBNIR_TSOIL
107 REAL,
DIMENSION(PK%NSIZE_P) :: ZFAPIR, ZFAPAR, ZFAPIR_BS, ZFAPAR_BS
108 REAL,
DIMENSION(PK%NSIZE_P,SIZE(S%XABC)) :: ZIACAN_SUNLIT, ZIACAN_SHADE, ZFRAC_SUN, ZIACAN
109 LOGICAL,
DIMENSION(PK%NSIZE_P) :: GSHADE
111 REAL,
PARAMETER :: ZPUT0 = 0.0
114 REAL(KIND=JPRB) :: ZHOOK_HANDLE
120 IF (
lhook)
CALL dr_hook(
'UPDATE_RAD_ISBA_N',0,zhook_handle)
121 iswb =
SIZE(psw_bands)
125 zveg(:) = pek%XVEG(:)
127 IF(io%LMEB_PATCH(kpatch).OR.io%LFLOOD)
THEN 131 IF(io%LMEB_PATCH(kpatch))
THEN 136 IF(
PRESENT(pdir_sw))
THEN 149 CALL isba_snow_frac(pek%TSNOW%SCHEME, pek%TSNOW%WSNOW, pek%TSNOW%RHO, pek%TSNOW%ALB, &
150 zveg, pek%XLAI, pek%XZ0, pek%XPSN, zpsnv_a, pek%XPSNG, pek%XPSNV )
152 IF ( pek%TSNOW%SCHEME==
'EBA' ) pek%XPSNV_A(:) = zpsnv_a(:)
164 WHERE(kk%XFFLOOD(:)==0.0)
171 WHERE(pek%XTG(:,1)>=
xtt)
182 kk%XALBF(:)=0.5*(zalbf_dir(:)+zalbf_sca(:))
185 zemisf(:) = kk%XEMISF(:)
196 IF(io%LMEB_PATCH(kpatch))
THEN 198 zsnowdepth(:) =
sum(pek%TSNOW%WSNOW(:,:)/pek%TSNOW%RHO(:,:),2)
199 zpalphan(:) =
mebpalphan(zsnowdepth,pek%XH_VEG)
201 kk%XDIR_ALB_WITH_SNOW(:,:) =
xundef 202 kk%XSCA_ALB_WITH_SNOW(:,:) =
xundef 204 IF(
PRESENT(pdir_sw))
THEN 212 zglobal_sw(:) = zdir_sw(:,jswb) + zsca_sw(:,jswb)
214 WHERE(pek%TSNOW%ALB(:)/=
xundef .AND. pek%TSNOW%ALBVIS(:)/=
xundef .AND. pek%TSNOW%ALBNIR(:)/=
xundef)
215 zlain(:) = pek%XLAI(:)*(1.0-zpalphan(:))
216 zalbvis_tsoil(:) = pek%XALBVIS_SOIL(:)*(1.-pek%XPSN(:)) + pek%XPSN(:)*pek%TSNOW%ALBVIS(:)
217 zalbnir_tsoil(:) = pek%XALBNIR_SOIL(:)*(1.-pek%XPSN(:)) + pek%XPSN(:)*pek%TSNOW%ALBNIR(:)
219 zlain(:) = pek%XLAI(:)
220 zalbvis_tsoil(:) = pek%XALBVIS_SOIL(:)
221 zalbnir_tsoil(:) = pek%XALBNIR_SOIL(:)
225 pek%XALBVIS_VEG, zalbvis_tsoil, pek%XALBNIR_VEG, zalbnir_tsoil, &
226 zglobal_sw, zlain, zzenith, s%XABC, &
227 pek%XFAPARC, pek%XFAPIRC, pek%XMUS, pek%XLAI_EFFC, gshade, ziacan, &
228 ziacan_sunlit, ziacan_shade, zfrac_sun, &
229 zfapar, zfapir, zfapar_bs, zfapir_bs )
236 zswup(:) = zglobal_sw(:)*zalbt(:)
237 zalbt(:) = zswup(:)/max(1.e-5, zglobal_sw(:))
239 kk%XDIR_ALB_WITH_SNOW(:,jswb)=zalbt(:)
240 kk%XSCA_ALB_WITH_SNOW(:,jswb)=zalbt(:)
253 CALL isba_emis_meb(pek%XPSN, zpalphan, zsigma_f, zsigma_fn, zemissn, zemist )
259 zalbnir_with_snow(:) = pek%XALBNIR(:) * (1.-pek%XPSN(:)-zff(:)) + pek%TSNOW%ALB (:) * pek%XPSN(:)
260 zalbvis_with_snow(:) = pek%XALBVIS(:) * (1.-pek%XPSN(:)-zff(:)) + pek%TSNOW%ALB (:) * pek%XPSN(:)
261 zalbuv_with_snow(:) = pek%XALBUV (:) * (1.-pek%XPSN(:)-zff(:)) + pek%TSNOW%ALB (:) * pek%XPSN(:)
266 zalbnir_with_snow, zalbvis_with_snow, zalbuv_with_snow,&
267 kk%XDIR_ALB_WITH_SNOW, kk%XSCA_ALB_WITH_SNOW )
270 kk%XDIR_ALB_WITH_SNOW(:,jswb)=kk%XDIR_ALB_WITH_SNOW(:,jswb) + zff(:)*zalbf_dir(:)
271 kk%XSCA_ALB_WITH_SNOW(:,jswb)=kk%XSCA_ALB_WITH_SNOW(:,jswb) + zff(:)*zalbf_sca(:)
278 zemist(:) = (1.-pek%XPSN(:)-zff(:))*pek%XEMIS(:) + pek%XPSN(:) * xemissn + zff(:)*zemisf(:)
284 CALL unpack_same_rank(pk%NR_P,kk%XDIR_ALB_WITH_SNOW, pdir_alb_with_snow,zput0)
285 CALL unpack_same_rank(pk%NR_P,kk%XSCA_ALB_WITH_SNOW, psca_alb_with_snow,zput0)
289 IF (
lhook)
CALL dr_hook(
'UPDATE_RAD_ISBA_N',1,zhook_handle)
real function, dimension(size(ppsnv)) flood_frac_veg(PLAI, PPSNV, PFFLOOD)
real, parameter xsw_wght_vis
real function, dimension(size(pveg)) flood_frac_nat(PVEG, PFFG, PFFV, PFFLOOD)
subroutine isba_snow_frac(HSNOW, PWSNOW, PRSNOW, PASNOW, PVEG, PLAI, PZ0, PPSN, PPSNV_A, PPSNG, P
real function, dimension(size(ppsng)) flood_frac_ground(PPSNG, PFFLOOD)
real function, dimension(size(pzenith)) albedo_ta96(PZENITH)
intent(out) overrides sub arrays one Sort by the least significant key first sum(iindex(1:n))
subroutine isba_emis_meb(PPSN, PPSNA, PSIGMA_F, PSIGMA_FN, PEMIS_N, PEMIS)
subroutine albedo_from_nir_vis(PSW_BANDS, PALBNIR, PALBVIS, PALBUV, PD
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 update_rad_isba_n(IO, S, KK, PK, PEK, KPATCH, PZENITH, PSW_BANDS, PDIR_ALB_WITH_SNOW, PSCA_ALB_WITH_SNOW, PEMIST, PDIR_SW, PSCA_SW)
real, parameter xsw_wght_nir