36 USE modd_isba_par
, ONLY : xwgmin
39 USE modd_prep_isba
, ONLY : lsnow_ideal
43 USE modi_prep_ver_snow
60 REAL,
DIMENSION(:),
INTENT(IN) :: PZS
69 REAL,
DIMENSION(:),
ALLOCATABLE :: ZZS, ZZS_LS
70 REAL,
DIMENSION(:),
ALLOCATABLE :: ZWGTOT
71 REAL,
DIMENSION(:),
ALLOCATABLE :: ZDW
72 REAL,
DIMENSION(:),
ALLOCATABLE :: ZZSFREEZE
75 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZWGI_CLIM_GRAD
77 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZTG_LS
79 REAL :: ZGRADX = 5.e-4
81 REAL(KIND=JPRB) :: ZHOOK_HANDLE
89 IF (io%CISBA==
'DIF')
THEN 90 ideep_soil = io%NGROUND_LAYER
101 iwork=
SIZE(pek%XWG,2)
103 iwork=
SIZE(pek%XTG,2)
106 ALLOCATE(zzs(pk%NSIZE_P))
108 ALLOCATE(zzs_ls(pk%NSIZE_P))
111 ALLOCATE(zwgi_clim_grad(
SIZE(pek%XWG,1),
SIZE(pek%XWG,2)))
113 zwgi_clim_grad(:,:) = zgradx * exp( - pk%XDG(:,:) / zh0 )
118 ALLOCATE(ztg_ls(
SIZE(pek%XTG,1),
SIZE(pek%XTG,2)))
119 ztg_ls(:,:) = pek%XTG(:,:)
121 DO jl=1,
SIZE(pek%XTG,2)
122 WHERE(pek%XTG(:,jl)/=
xundef) &
123 pek%XTG(:,jl) = pek%XTG(:,jl) +
xt_clim_grad * (zzs - zzs_ls)
130 ALLOCATE(zzsfreeze(
SIZE(pek%XWG,1)))
131 ALLOCATE(zwgtot(
SIZE(pek%XWG,1)))
132 ALLOCATE(zdw(
SIZE(pek%XWG,1)))
142 WHERE(pek%XTG(:,jl)/=
xundef)
144 WHERE (ztg_ls(:,jl) <
xtt)
146 WHERE (zzs <= zzs_ls)
148 WHERE (zzs > zzsfreeze)
149 zdw(:) = zwgi_clim_grad(:,jl) * (zzs - zzs_ls)
151 zdw(:) = zwgi_clim_grad(:,jl) * (zzsfreeze - zzs_ls) + zgradx * (zzs - zzsfreeze)
156 zdw(:) = zwgi_clim_grad(:,jl) * (zzs - zzs_ls)
162 WHERE (zzs <= zzs_ls)
164 zdw(:) = zgradx * (zzs - zzs_ls)
168 zdw(:) = zwgi_clim_grad(:,jl) * (zzs - zzsfreeze)
176 WHERE(pek%XWG(:,jl)/=
xundef)
177 zwgtot(:) = pek%XWG(:,jl) + pek%XWGI(:,jl)
180 WHERE(pek%XWG(:,jl)/=
xundef)
181 pek%XWGI(:,jl) = pek%XWGI(:,jl) + zdw(:)
182 pek%XWG (:,jl) = pek%XWG (:,jl) - zdw(:)
185 WHERE (pek%XWGI(:,jl)<0.0.AND.pek%XWGI(:,jl)/=
xundef)
187 pek%XWG (:,jl) = zwgtot(:)
190 WHERE (pek%XWG(:,jl)<xwgmin.AND.pek%XWG(:,jl)/=
xundef)
191 pek%XWG (:,jl) = xwgmin
192 pek%XWGI(:,jl) = zwgtot(:) - xwgmin
195 WHERE(pek%XWGI(:,jl)>0.0.AND.pek%XWGI(:,jl)/=
xundef)
196 pek%XTG(:,jl) = min(
xtt,pek%XTG(:,jl))
198 pek%XTG(:,jl) = max(
xtt,pek%XTG(:,jl))
208 IF (io%CISBA==
'2-L'.OR.io%CISBA==
'3-L')
THEN 209 pek%XWG (:,2) = max(pek%XWG (:,1)*pk%XDG(:,1),pek%XWG (:,2)*pk%XDG(:,2))/pk%XDG(:,2)
210 pek%XWGI(:,2) = max(pek%XWGI(:,1)*pk%XDG(:,1),pek%XWGI(:,2)*pk%XDG(:,2))/pk%XDG(:,2)
213 IF (io%CISBA==
'3-L')
THEN 215 WHERE (pek%XWGI(:,3) /=
xundef)
216 pek%XWG (:,3) = pek%XWG(:,3)+pek%XWGI(:,3)
218 pek%XTG (:,3) = ztg_ls(:,3) +
xt_clim_grad * (zzs - zzs_ls)
221 pek%XTG (:,4:
SIZE(pek%XTG,2)) = ztg_ls(:,4:
SIZE(pek%XTG,2))
224 ELSEIF(io%CISBA==
'2-L'.AND.io%LTEMP_ARP)
THEN 226 pek%XTG (:,3:
SIZE(pek%XTG,2)) = ztg_ls(:,3:
SIZE(pek%XTG,2))
231 WHERE (pek%XTG(:,1:
SIZE(pek%XWG,2)) ==
xundef)
236 IF (.NOT.lsnow_ideal)
THEN 237 CALL prep_ver_snow(pek%TSNOW,zzs_ls,zzs,ztg_ls,pek%XTG,ideep_soil)
240 DEALLOCATE(zzsfreeze)
241 DEALLOCATE(zwgi_clim_grad)
244 DEALLOCATE(ztg_ls, zzs, zzs_ls)
subroutine prep_ver_snow(TPSNOW, PZS_LS, PZS, PTG_LS, PTG, KDEEP_SOIL)
real, dimension(:), allocatable xzs_ls
real, parameter xt_clim_grad
subroutine prep_ver_isba(IO, NPE, PZS, NP)