46 USE yomhook
,ONLY : lhook, dr_hook
47 USE parkind1
,ONLY : jprb
54 REAL,
DIMENSION(:),
INTENT(IN) :: pzs_ls
55 REAL,
DIMENSION(:),
INTENT(IN) :: pzs
56 REAL,
DIMENSION(:,:,:),
INTENT(IN),
OPTIONAL:: ptg_ls
57 REAL,
DIMENSION(:,:,:),
INTENT(IN),
OPTIONAL:: ptg
58 INTEGER,
INTENT(IN),
OPTIONAL:: kdeep_soil
62 REAL,
DIMENSION(:,:,:),
ALLOCATABLE :: zwsnow_ls
63 REAL,
DIMENSION(:,:,:),
ALLOCATABLE :: ztsnow_ls
64 REAL,
DIMENSION(:,:,:),
ALLOCATABLE :: zwsnow
65 REAL,
DIMENSION(:,:,:),
ALLOCATABLE :: ztsnow
66 REAL,
DIMENSION(:,:,:),
ALLOCATABLE :: zwsnow2
67 REAL,
DIMENSION(:,:,:),
ALLOCATABLE :: ztsnow2
68 REAL,
DIMENSION(:,:,:),
ALLOCATABLE :: zwliq
69 REAL,
DIMENSION(:,:),
ALLOCATABLE :: zzsfreeze
70 REAL,
DIMENSION(:,:),
ALLOCATABLE :: zdtot
71 REAL,
DIMENSION(:,:,:),
ALLOCATABLE :: zdzsn
77 REAL(KIND=JPRB) :: zhook_handle
81 IF (lhook) CALL dr_hook(
'PREP_VER_SNOW',0,zhook_handle)
82 ipatch =
SIZE(tpsnow%WSNOW,3)
87 ALLOCATE(zwsnow_ls(
SIZE(tpsnow%WSNOW,1),
SIZE(tpsnow%WSNOW,2),ipatch))
88 zwsnow_ls(:,:,:) = tpsnow%WSNOW(:,:,:)
95 ALLOCATE(ztsnow_ls(
SIZE(tpsnow%WSNOW,1),
SIZE(tpsnow%WSNOW,2),ipatch))
96 SELECT CASE(tpsnow%SCHEME)
98 IF (present(ptg_ls))
THEN
100 ztsnow_ls(:,1,jpatch) = min(ptg_ls(:,1,jpatch),xtt)
106 ztsnow_ls(:,:,:) = tpsnow%T(:,:,:)
116 ALLOCATE(ztsnow(
SIZE(tpsnow%WSNOW,1),
SIZE(tpsnow%WSNOW,2),ipatch))
118 DO jlayer=1,tpsnow%NLAYER
119 ztsnow(:,jlayer,jpatch) = ztsnow_ls(:,jlayer,jpatch) + xt_clim_grad * (pzs(:) - pzs_ls(:))
130 ALLOCATE(zwsnow(
SIZE(tpsnow%WSNOW,1),
SIZE(tpsnow%WSNOW,2),ipatch))
132 zwsnow(:,:,:) = zwsnow_ls(:,:,:)
134 IF (present(ptg))
THEN
136 DO jlayer=1,tpsnow%NLAYER
137 WHERE(zwsnow_ls(:,jlayer,jpatch)>0..AND.((ptg(:,kdeep_soil,jpatch)-xtt >= 2.).OR.(pzs(:) > pzs_ls(:))))
138 zwsnow(:,jlayer,jpatch) = zwsnow_ls(:,jlayer,jpatch) + &
139 &( xwsnow_clim_grad * (pzs(:) - pzs_ls(:))/tpsnow%NLAYER)
140 zwsnow(:,jlayer,jpatch) = max(zwsnow(:,jlayer,jpatch),0.)
146 DO jlayer=1,tpsnow%NLAYER
147 WHERE(zwsnow_ls(:,jlayer,jpatch)>0.)
148 zwsnow(:,jlayer,jpatch) = zwsnow_ls(:,jlayer,jpatch) + &
149 &( xwsnow_clim_grad * (pzs(:) - pzs_ls(:))/tpsnow%NLAYER)
150 zwsnow(:,jlayer,jpatch) = max(zwsnow(:,jlayer,jpatch),0.)
156 WHERE(tpsnow%WSNOW(:,:,:)/=xundef) tpsnow%WSNOW = zwsnow
172 IF (present(ptg))
THEN
173 ALLOCATE(zzsfreeze(
SIZE(tpsnow%WSNOW,1),ipatch))
175 zzsfreeze(:,jpatch) = pzs &
176 + (xtt - ptg(:,kdeep_soil,jpatch)) / xt_clim_grad
185 ALLOCATE(zwsnow2(
SIZE(tpsnow%WSNOW,1),tpsnow%NLAYER,ipatch))
186 ALLOCATE(ztsnow2(
SIZE(tpsnow%WSNOW,1),tpsnow%NLAYER,ipatch))
188 DO jlayer=1,tpsnow%NLAYER
189 zwsnow2(:,jlayer,jpatch) = xwsnow_clim_grad *&
190 & (pzs(:) - zzsfreeze(:,jpatch))/tpsnow%NLAYER
191 zwsnow2(:,jlayer,jpatch) = max(zwsnow2(:,jlayer,jpatch),0.)
192 ztsnow2(:,jlayer,jpatch) = ptg(:,kdeep_soil,jpatch)
200 DO jlayer=1,tpsnow%NLAYER
201 WHERE(tpsnow%WSNOW(:,jlayer,jpatch)/=xundef .AND. zwsnow_ls(:,jlayer,jpatch)==0. &
202 .AND. (pzs(:)-pzs_ls(:))>1000. )
203 tpsnow%WSNOW(:,jlayer,jpatch) = zwsnow2(:,jlayer,jpatch)
204 ztsnow(:,jlayer,jpatch) = ztsnow2(:,jlayer,jpatch)
209 DEALLOCATE(zzsfreeze)
219 SELECT CASE(tpsnow%SCHEME)
222 tpsnow%T (:,:,:) = min( ztsnow(:,:,:), xtt )
224 ALLOCATE(zwliq(
SIZE(tpsnow%WSNOW,1),
SIZE(tpsnow%WSNOW,2),ipatch))
234 SELECT CASE(tpsnow%SCHEME)
236 ALLOCATE(zdtot(
SIZE(tpsnow%WSNOW,1),ipatch))
237 ALLOCATE(zdzsn(
SIZE(tpsnow%WSNOW,1),
SIZE(tpsnow%WSNOW,2),ipatch))
239 DO jlayer=1,tpsnow%NLAYER
240 WHERE(tpsnow%WSNOW(:,jlayer,:)/=xundef.AND.tpsnow%RHO(:,jlayer,:)/=xundef)
241 zdtot(:,:)=zdtot(:,:)+tpsnow%WSNOW(:,jlayer,:)/tpsnow%RHO(:,jlayer,:)
245 CALL
snow3lgrid(zdzsn(:,:,jpatch),zdtot(:,jpatch))
246 DO jlayer=1,tpsnow%NLAYER
247 WHERE(tpsnow%RHO(:,jlayer,jpatch)/=xundef.AND.zdtot(:,jpatch)>0.)
248 tpsnow%WSNOW(:,jlayer,jpatch) = tpsnow%RHO(:,jlayer,jpatch) * zdzsn(:,jlayer,jpatch)
249 ELSEWHERE(tpsnow%RHO(:,jlayer,jpatch)==xundef.OR.zdtot(:,jpatch)==0.0)
250 tpsnow%WSNOW(:,jlayer,jpatch) = 0.0
252 tpsnow%WSNOW(:,jlayer,jpatch) = xundef
268 DEALLOCATE(zwsnow_ls)
269 DEALLOCATE(ztsnow_ls)
272 IF (lhook) CALL dr_hook(
'PREP_VER_SNOW',1,zhook_handle)
subroutine prep_ver_snow(TPSNOW, PZS_LS, PZS, PTG_LS, PTG, KDEEP_SOIL)
subroutine mkflag_snow(TPSNOW)