6 SUBROUTINE prep_isba (DTCO, ICP, IG, I, UG, U, USS, &
7 hprogram,hatmfile,hatmfiletype,hpgdfile,hpgdfiletype)
64 USE modi_prep_hor_isba_field
65 USE modi_prep_ver_isba
66 USE modi_prep_output_grid
68 USE modi_prep_isba_canopy
89 USE modi_vegtype_to_patch
90 USE modi_prep_perm_snow
92 USE modi_averaged_albedo_emis_isba
93 USE modi_prep_hor_isba_cc_field
97 USE yomhook
,ONLY : lhook, dr_hook
98 USE parkind1
,ONLY : jprb
100 USE modi_clean_prep_output_grid
108 TYPE(isba_canopy_t
),
INTENT(INOUT) :: icp
109 TYPE(isba_grid_t
),
INTENT(INOUT) :: ig
110 TYPE(isba_t
),
INTENT(INOUT) :: i
115 CHARACTER(LEN=6),
INTENT(IN) :: hprogram
116 CHARACTER(LEN=28),
INTENT(IN) :: hatmfile
117 CHARACTER(LEN=6),
INTENT(IN) :: hatmfiletype
118 CHARACTER(LEN=28),
INTENT(IN) :: hpgdfile
119 CHARACTER(LEN=6),
INTENT(IN) :: hpgdfiletype
123 INTEGER :: iluout, ini
124 INTEGER :: jp, jl, jj
126 REAL :: zwork, zlog, zwtot, zmatpot, zwl
128 REAL,
DIMENSION(1) :: zsw_bands
129 REAL,
DIMENSION(SIZE(I%XLAI,1),SIZE(I%XLAI,2)) :: zdir_alb
130 REAL,
DIMENSION(SIZE(I%XLAI,1),SIZE(I%XLAI,2)) :: zsca_alb
131 REAL,
DIMENSION(SIZE(I%XLAI,1)) :: zemis
132 REAL,
DIMENSION(SIZE(I%XLAI,1)) :: zzenith
133 REAL,
DIMENSION(SIZE(I%XLAI,1)) :: ztsurf
143 INTEGER :: isize_lmeb_patch
145 REAL(KIND=JPRB) :: zhook_handle
149 IF (lhook) CALL dr_hook(
'PREP_ISBA',0,zhook_handle)
158 isize_lmeb_patch=count(i%LMEB_PATCH(:))
165 iluout,ig%CGRID,ig%XGRID_PAR,ig%XLAT,ig%XLON)
175 hprogram,
'ZS ',hatmfile,hatmfiletype,hpgdfile,hpgdfiletype)
180 hprogram,
'WG ',hatmfile,hatmfiletype,hpgdfile,hpgdfiletype,gwg)
185 hprogram,
'WGI ',hatmfile,hatmfiletype,hpgdfile,hpgdfiletype,gwgi)
190 hprogram,
'WR ',hatmfile,hatmfiletype,hpgdfile,hpgdfiletype)
195 hprogram,
'TG ',hatmfile,hatmfiletype,hpgdfile,hpgdfiletype,gtg)
200 hprogram,
'SN_VEG ',hatmfile,hatmfiletype,hpgdfile,hpgdfiletype,gpermsnow)
205 hprogram,
'LAI ',hatmfile,hatmfiletype,hpgdfile,hpgdfiletype)
211 hprogram,
'ICE_STO',hatmfile,hatmfiletype,hpgdfile,hpgdfiletype)
216 IF(isize_lmeb_patch>0)
THEN
218 hprogram,
'TV ',hatmfile,hatmfiletype,hpgdfile,hpgdfiletype)
220 hprogram,
'TL ',hatmfile,hatmfiletype,hpgdfile,hpgdfiletype)
222 hprogram,
'WRL ',hatmfile,hatmfiletype,hpgdfile,hpgdfiletype)
224 hprogram,
'WRLI ',hatmfile,hatmfiletype,hpgdfile,hpgdfiletype)
226 hprogram,
'WRVN ',hatmfile,hatmfiletype,hpgdfile,hpgdfiletype)
228 hprogram,
'TC ',hatmfile,hatmfiletype,hpgdfile,hpgdfiletype)
230 hprogram,
'QC ',hatmfile,hatmfiletype,hpgdfile,hpgdfiletype)
238 IF (i%CISBA ==
'3-L')
THEN
240 WHERE(i%XWG(:,3,jp) /= xundef)
241 i%XWG(:,3,jp) = min(i%XWG(:,3,jp)+i%XWGI(:,3,jp),i%XWSAT(:,3))
249 WHERE(i%XWG(:,:,jp) /= xundef .AND. (i%XWG(:,:,jp) + i%XWGI(:,:,jp)) > i%XWSAT(:,:) )
250 i%XWGI(:,:,jp) = i%XWSAT(:,:) - i%XWG(:,:,jp)
267 IF (gpermsnow.AND.lsnow_prep_perm)
THEN
270 i%TSNOW,i%XTG(:,:,isnow),i%XVEGTYPE_PATCH(:,:,isnow),isnow)
276 i%TSNOW%WSNOW(:,:,:)=0.
282 smax = maxval(i%TSNOW%WSNOW(:,:,:))
283 WRITE(*,*)
' MAX(Snow content (kg/m2)): ', smax
284 WRITE(*,*)
' Set MAX to', xswemax,
'(kg/m2)'
285 i%TSNOW%WSNOW(:,:,:) = min(i%TSNOW%WSNOW(:,:,:),xswemax)
286 smax = maxval(i%TSNOW%WSNOW(:,:,:))
287 WRITE(*,*)
' MAX(Snow content (kg/m2)): ', smax
294 gtemp2wgi=(gwg.OR.gwgi.OR.gtg)
296 IF (i%CISBA ==
'DIF'.AND.gtemp2wgi)
THEN
299 DO jl=1,i%NGROUND_LAYER
301 IF(i%XWG(jj,jl,jp)/=xundef)
THEN
304 zwtot = i%XWG(jj,jl,jp)+i%XWGI(jj,jl,jp)
305 zwtot = min(zwtot,i%XWSAT(jj,jl))
309 zwork = zwtot/i%XWSAT(jj,jl)
310 zlog = i%XBCOEF(jj,jl)*log(zwork)
311 zmatpot = i%XMPOTSAT(jj,jl)*exp(-zlog)
315 zmatpot = min(i%XMPOTSAT(jj,jl),xlmtt*(i%XTG(jj,jl,jp)-xtt)/(xg*i%XTG(jj,jl,jp)))
316 zwork = max(1.0,zmatpot/i%XMPOTSAT(jj,jl))
318 zwl = i%XWSAT(jj,jl)*exp(-zlog/i%XBCOEF(jj,jl))
319 zwl = max(zwl,xwgmin)
320 i%XWG(jj,jl,jp) = min(zwl,zwtot )
323 i%XWGI(jj,jl,jp) = max(0.0,zwtot-i%XWG(jj,jl,jp))
326 IF(i%XTG(jj,jl,jp)>=xtt)
THEN
327 i%XWG (jj,jl,jp) = min(i%XWG(jj,jl,jp)+i%XWGI(jj,jl,jp),i%XWSAT(jj,jl))
328 i%XWGI(jj,jl,jp) = 0.0
343 ALLOCATE(i%XRESA(
SIZE(i%XLAI,1),
SIZE(i%XLAI,2)))
346 ALLOCATE(i%XTSRAD_NAT(
SIZE(i%XLAI,1)))
350 ALLOCATE(i%XALBNIR(
SIZE(i%XLAI,1),
SIZE(i%XLAI,2)))
351 ALLOCATE(i%XALBVIS(
SIZE(i%XLAI,1),
SIZE(i%XLAI,2)))
352 ALLOCATE(i%XALBUV(
SIZE(i%XLAI,1),
SIZE(i%XLAI,2)))
357 ALLOCATE(i%XALBNIR_SOIL(
SIZE(i%XLAI,1),
SIZE(i%XLAI,2)))
358 ALLOCATE(i%XALBVIS_SOIL(
SIZE(i%XLAI,1),
SIZE(i%XLAI,2)))
359 ALLOCATE(i%XALBUV_SOIL(
SIZE(i%XLAI,1),
SIZE(i%XLAI,2)))
360 CALL
soil_albedo(i%CALBEDO, i%XWSAT(:,1),i%XWG(:,1,:), &
361 i%XALBVIS_DRY,i%XALBNIR_DRY,i%XALBUV_DRY, &
362 i%XALBVIS_WET,i%XALBNIR_WET,i%XALBUV_WET, &
363 i%XALBVIS_SOIL,i%XALBNIR_SOIL,i%XALBUV_SOIL )
365 ALLOCATE(i%XPSN (
SIZE(i%XLAI,1),
SIZE(i%XLAI,2)))
366 ALLOCATE(i%XPSNG (
SIZE(i%XLAI,1),
SIZE(i%XLAI,2)))
367 ALLOCATE(i%XPSNV (
SIZE(i%XLAI,1),
SIZE(i%XLAI,2)))
368 ALLOCATE(i%XPSNV_A(
SIZE(i%XLAI,1),
SIZE(i%XLAI,2)))
373 ALLOCATE(i%XDIR_ALB_WITH_SNOW(
SIZE(i%XLAI,1),1,
SIZE(i%XLAI,2)))
374 ALLOCATE(i%XSCA_ALB_WITH_SNOW(
SIZE(i%XLAI,1),1,
SIZE(i%XLAI,2)))
375 i%XDIR_ALB_WITH_SNOW = 0.0
376 i%XSCA_ALB_WITH_SNOW = 0.0
378 .false., i%CALBEDO, zzenith, &
379 i%XVEG,i%XZ0,i%XLAI, &
380 i%LMEB_PATCH,i%XGNDLITTER,i%XZ0LITTER,i%XLAIGV, &
382 i%XTG(:,1,:),i%XPATCH, zsw_bands, &
383 i%XALBNIR_VEG,i%XALBVIS_VEG,i%XALBUV_VEG, &
384 i%XALBNIR_SOIL,i%XALBVIS_SOIL,i%XALBUV_SOIL, &
387 i%XALBNIR,i%XALBVIS,i%XALBUV, &
388 zdir_alb, zsca_alb, &
389 zemis,i%XTSRAD_NAT,ztsurf )
393 DEALLOCATE(i%XPSNV_A)
394 DEALLOCATE(i%XDIR_ALB_WITH_SNOW)
395 DEALLOCATE(i%XSCA_ALB_WITH_SNOW)
401 IF (i%CPHOTO /=
'NON')
THEN
403 ALLOCATE(i%XAN(
SIZE(i%XLAI,1),
SIZE(i%XLAI,2)))
406 ALLOCATE(i%XANDAY(
SIZE(i%XLAI,1),
SIZE(i%XLAI,2)))
409 ALLOCATE(i%XANFM(
SIZE(i%XLAI,1),
SIZE(i%XLAI,2)))
412 ALLOCATE(i%XLE(
SIZE(i%XLAI,1),
SIZE(i%XLAI,2)))
415 ALLOCATE(i%XRESP_BIOMASS(
SIZE(i%XLAI,1),i%NNBIOMASS,
SIZE(i%XLAI,2)))
416 i%XRESP_BIOMASS(:,:,:) = 0.
420 IF (i%CPHOTO ==
'AGS' .OR. i%CPHOTO ==
'AST')
THEN
422 ALLOCATE(i%XBIOMASS(
SIZE(i%XLAI,1),i%NNBIOMASS,
SIZE(i%XLAI,2)))
423 i%XBIOMASS(:,:,:) = 0.
425 ELSEIF (i%CPHOTO ==
'LAI' .OR. i%CPHOTO ==
'LST')
THEN
427 ALLOCATE(i%XBIOMASS(
SIZE(i%XLAI,1),i%NNBIOMASS,
SIZE(i%XLAI,2)))
428 WHERE(i%XLAI(:,:)/=xundef)
429 i%XBIOMASS(:,1,:) = i%XLAI(:,:) * i%XBSLAI(:,:)
431 i%XBIOMASS(:,1,:) = 0.0
434 ELSEIF (i%CPHOTO ==
'NIT' .OR. i%CPHOTO ==
'NCB')
THEN
438 hprogram,
'BIOMASS ',hatmfile,hatmfiletype,hpgdfile,hpgdfiletype)
446 IF (i%CRESPSL ==
'CNT')
THEN
452 hprogram,
'LITTER ',hatmfile,hatmfiletype,hpgdfile,hpgdfiletype)
458 hprogram,
'SOILCARB',hatmfile,hatmfiletype,hpgdfile,hpgdfiletype)
464 hprogram,
'LIGNIN ',hatmfile,hatmfiletype,hpgdfile,hpgdfiletype)
475 i%LCANOPY = lisba_canopy
478 IF (lhook) CALL dr_hook(
'PREP_ISBA',1,zhook_handle)
subroutine clean_prep_output_grid
subroutine prep_ver_isba(I)
subroutine init_snow_lw(PEMISSN, TPSNOW)
subroutine prep_hor_isba_field(DTCO, IG, I, UG, U, USS, HPROGRAM, HSURF, HATMFILE, HATMFILETYPE, HPGDFILE, HPGDFILETYPE, OKEY)
integer function vegtype_to_patch(IVEGTYPE, INPATCH)
subroutine prep_isba(DTCO, ICP, IG, I, UG, U, USS, HPROGRAM, HATMFILE, HATMFILETYPE, HPGDFILE, HPGDFILETYPE)
subroutine get_luout(HPROGRAM, KLUOUT)
subroutine prep_hor_isba_cc_field(DTCO, U, IG, I, HPROGRAM, HSURF, HATMFILE, HATMFILETYPE, HPGDFILE, HPGDFILETYPE)
subroutine prep_perm_snow(I, TPSNOW, PTG, PPERM_SNOW_FRAC, KSNOW)
subroutine prep_isba_canopy(ICP, IG)
subroutine prep_output_grid(UG, U, KLUOUT, HGRID, PGRID_PAR, PLAT, PLON)
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)