6 SUBROUTINE prep_ver_snow(TPSNOW,PZS_LS,PZS,PTG_LS,PTG,KDEEP_SOIL)
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
75 REAL(KIND=JPRB) :: ZHOOK_HANDLE
84 ALLOCATE(zwsnow_ls(
SIZE(tpsnow%WSNOW,1),
SIZE(tpsnow%WSNOW,2)))
85 zwsnow_ls(:,:) = tpsnow%WSNOW(:,:)
92 ALLOCATE(ztsnow_ls(
SIZE(tpsnow%WSNOW,1),
SIZE(tpsnow%WSNOW,2)))
93 SELECT CASE(tpsnow%SCHEME)
95 IF (
PRESENT(ptg_ls))
THEN 96 ztsnow_ls(:,1) = min(ptg_ls(:,1),
xtt)
101 ztsnow_ls(:,:) = tpsnow%T(:,:)
111 ALLOCATE(ztsnow(
SIZE(tpsnow%WSNOW,1),
SIZE(tpsnow%WSNOW,2)))
112 DO jl=1,tpsnow%NLAYER
113 ztsnow(:,jl) = ztsnow_ls(:,jl) +
xt_clim_grad * (pzs(:) - pzs_ls(:))
123 ALLOCATE(zwsnow(
SIZE(tpsnow%WSNOW,1),
SIZE(tpsnow%WSNOW,2)))
125 zwsnow(:,:) = zwsnow_ls(:,:)
127 IF (
PRESENT(ptg))
THEN 128 DO jl=1,tpsnow%NLAYER
129 WHERE(zwsnow_ls(:,jl)>0..AND.((ptg(:,kdeep_soil)-
xtt >= 2.).OR.(pzs(:) > pzs_ls(:))))
130 zwsnow(:,jl) = zwsnow_ls(:,jl) + (
xwsnow_clim_grad * (pzs(:) - pzs_ls(:))/tpsnow%NLAYER)
131 zwsnow(:,jl) = max(zwsnow(:,jl),0.)
135 DO jl=1,tpsnow%NLAYER
136 WHERE(zwsnow_ls(:,jl)>0.)
137 zwsnow(:,jl) = zwsnow_ls(:,jl) + (
xwsnow_clim_grad * (pzs(:) - pzs_ls(:))/tpsnow%NLAYER)
138 zwsnow(:,jl) = max(zwsnow(:,jl),0.)
143 WHERE(tpsnow%WSNOW(:,:)/=
xundef) tpsnow%WSNOW = zwsnow
159 IF (
PRESENT(ptg))
THEN 161 ALLOCATE(zzsfreeze(
SIZE(tpsnow%WSNOW,1)))
170 ALLOCATE(zwsnow2(
SIZE(tpsnow%WSNOW,1),tpsnow%NLAYER))
171 ALLOCATE(ztsnow2(
SIZE(tpsnow%WSNOW,1),tpsnow%NLAYER))
172 DO jl=1,tpsnow%NLAYER
174 zwsnow2(:,jl) = max(zwsnow2(:,jl),0.)
175 ztsnow2(:,jl) = ptg(:,kdeep_soil)
181 DO jl=1,tpsnow%NLAYER
182 WHERE(tpsnow%WSNOW(:,jl)/=
xundef .AND. zwsnow_ls(:,jl)==0. .AND. (pzs(:)-pzs_ls(:))>1000. )
183 tpsnow%WSNOW(:,jl) = zwsnow2(:,jl)
184 ztsnow(:,jl) = ztsnow2(:,jl)
188 DEALLOCATE(zzsfreeze)
198 SELECT CASE(tpsnow%SCHEME)
201 tpsnow%T (:,:) = min( ztsnow(:,:),
xtt )
203 ALLOCATE(zwliq(
SIZE(tpsnow%WSNOW,1),
SIZE(tpsnow%WSNOW,2)))
213 SELECT CASE(tpsnow%SCHEME)
215 ALLOCATE(zdtot(
SIZE(tpsnow%WSNOW,1)))
216 ALLOCATE(zdzsn(
SIZE(tpsnow%WSNOW,1),
SIZE(tpsnow%WSNOW,2)))
218 DO jl=1,tpsnow%NLAYER
219 WHERE(tpsnow%WSNOW(:,jl)/=
xundef.AND.tpsnow%RHO(:,jl)/=
xundef)
220 zdtot(:)=zdtot(:)+tpsnow%WSNOW(:,jl)/tpsnow%RHO(:,jl)
224 DO jl=1,tpsnow%NLAYER
225 WHERE(tpsnow%RHO(:,jl)/=
xundef.AND.zdtot(:)>0.)
226 tpsnow%WSNOW(:,jl) = tpsnow%RHO(:,jl) * zdzsn(:,jl)
227 ELSEWHERE(tpsnow%RHO(:,jl)==
xundef.OR.zdtot(:)==0.0)
228 tpsnow%WSNOW(:,jl) = 0.0
230 tpsnow%WSNOW(:,jl) =
xundef 245 DEALLOCATE(zwsnow_ls)
246 DEALLOCATE(ztsnow_ls)
subroutine prep_ver_snow(TPSNOW, PZS_LS, PZS, PTG_LS, PTG, KDEEP_SOIL)
subroutine mkflag_snow(TPSNOW)
real, parameter xt_clim_grad
real, parameter xwsnow_clim_grad