8 psnowswe, psnowalb, psnowrho, ppg_melt )
67 USE modd_snow_par, ONLY : xans_t, xans_todry, xansmin, xansmax, &
68 xrhosmax, xrhosmin, xwcrn, xaglamin, &
74 USE yomhook
,ONLY : lhook, dr_hook
75 USE parkind1
,ONLY : jprb
82 LOGICAL,
INTENT(IN) :: oglacier
86 REAL,
INTENT(IN) :: ptstep
88 REAL,
DIMENSION(:,:),
INTENT(IN) :: pvegtype
89 REAL,
DIMENSION(:),
INTENT(IN) :: psr, ples, pmelt
93 REAL,
DIMENSION(:),
INTENT(INOUT) :: psnowswe, psnowalb, psnowrho, ppg_melt
102 REAL,
DIMENSION(SIZE(PSR)) :: zsnowswem, zwsx, zansmin, zansmax
108 REAL(KIND=JPRB) :: zhook_handle
111 IF (lhook) CALL dr_hook(
'HYDRO_SNOW',0,zhook_handle)
128 zsnowswem(:) = psnowswe(:)
138 psnowswe(:) = zsnowswem(:) + ptstep * ( psr(:) - ples(:)/xlstt - pmelt(:))
143 ppg_melt(:) = ppg_melt(:) + pmelt(:)
147 WHERE(psnowswe(:) < 1.0e-10) psnowswe(:) = 0.
155 zansmin(:) = xaglamin * pvegtype(:,nvt_snow) + xansmin * (1.0-pvegtype(:,nvt_snow))
156 zansmax(:) = xaglamax * pvegtype(:,nvt_snow) + xansmax * (1.0-pvegtype(:,nvt_snow))
164 WHERE (psnowswe > 0.0 )
166 WHERE ( zsnowswem > 0.0)
169 WHERE ( pmelt > 0.0 )
170 psnowalb(:) = (psnowalb(:)-zansmin(:))*exp(-xans_t*ptstep/xday) + zansmin(:) &
171 + psr(:)*ptstep/xwcrn*(zansmax(:)-zansmin(:))
174 psnowalb(:) = psnowalb(:) - xans_todry*ptstep/xday &
175 + psr(:)*ptstep/xwcrn*(zansmax(:)-zansmin(:))
178 ELSEWHERE (zsnowswem == 0.0)
181 psnowalb(:) = zansmax(:)
185 psnowalb(:) = min( zansmax(:), psnowalb(:) )
186 psnowalb(:) = max( zansmin(:), psnowalb(:) )
198 WHERE ( psnowswe > 0.0 )
199 WHERE ( zsnowswem > 0.0 )
200 zwsx(:) = max( psnowswe(:),psr(:)*ptstep)
201 psnowrho(:) = (psnowrho(:)-xrhosmax)*exp(-xans_t*ptstep/xday) + xrhosmax
202 psnowrho(:) = ( (zwsx(:)-psr(:)*ptstep) * psnowrho(:) &
203 + (psr(:)*ptstep) * xrhosmin ) / zwsx(:)
204 ELSEWHERE ( zsnowswem == 0.0)
205 psnowrho(:) = xrhosmin
214 WHERE ( psnowswe == 0.0 )
219 IF (lhook) CALL dr_hook(
'HYDRO_SNOW',1,zhook_handle)
subroutine hydro_snow(OGLACIER, PTSTEP, PVEGTYPE, PSR, PLES, PMELT, PSNOWSWE, PSNOWALB, PSNOWRHO, PPG_MELT)