7 ptstep,psr,psnowrho,psnowswe,pglasto,piceflux)
51 USE modd_snow_par, ONLY : xrhosmax, xhgla, xsnowdmin, xrhosmax_es
54 USE yomhook
,ONLY : lhook, dr_hook
55 USE parkind1
,ONLY : jprb
62 TYPE(isba_t
),
INTENT(INOUT) :: i
64 REAL,
INTENT(IN) :: ptstep
67 REAL,
DIMENSION(:),
INTENT(IN) :: psr
70 REAL,
DIMENSION(:,:),
INTENT(INOUT) :: psnowrho
73 REAL,
DIMENSION(:,:),
INTENT(INOUT) :: psnowswe
76 REAL,
DIMENSION(:),
INTENT(INOUT) :: pglasto
79 REAL,
DIMENSION(:),
INTENT(OUT) :: piceflux
85 REAL,
PARAMETER :: ztau=365.25
87 REAL,
DIMENSION(SIZE(PSR)) :: zglasto,zstomax,zflux,zsr,zswe
88 REAL,
DIMENSION(SIZE(PSR)) :: zsnowd
93 REAL(KIND=JPRB) :: zhook_handle
99 IF (lhook) CALL dr_hook(
'HYDRO_GLACIER',0,zhook_handle)
101 zglasto(:) = pglasto(:)
112 IF(i%TSNOW%SCHEME/=
'3-L' .AND. i%TSNOW%SCHEME/=
'CRO')
THEN
114 zswe(:)=psnowswe(:,1)
117 DO jwrk=1,
SIZE(psnowswe,2)
118 zswe(:) = zswe(:) + psnowswe(:,jwrk)
122 WHERE(zswe(:)>xhgla*zrhosmax)
130 pglasto(:)=(zglasto(:)+ptstep*zsr(:))/(1.0+ptstep/(ztau*xday))
134 zstomax(:)=zsr(:)*ptstep+zglasto(:)
136 pglasto(:)=min(zstomax(:),pglasto(:))
140 zflux(:)=(zglasto(:)-pglasto(:))/ptstep+zsr(:)
144 piceflux(:) = max(0.0,zflux(:))
145 pglasto(:) = pglasto(:) + piceflux(:)-zflux(:)
147 WHERE(pglasto(:)<=1.e-10)pglasto(:)=0.0
152 IF(i%TSNOW%SCHEME/=
'3-L' .AND. i%TSNOW%SCHEME/=
'CRO')
THEN
154 WHERE(psnowswe(:,1)<=xhgla*zrhosmax)piceflux(:)=0.0
155 psnowswe(:,1)=psnowswe(:,1)-piceflux(:)*ptstep
159 WHERE(zswe(:)<=xhgla*zrhosmax)piceflux(:)=0.0
163 DO jwrk=1,
SIZE(psnowswe,2)
164 zsnowd(:) = zsnowd(:) + psnowswe(:,jwrk)/psnowrho(:,jwrk)
168 DO jwrk=1,
SIZE(psnowswe,2)
169 zflux(:) = piceflux(:)*(psnowswe(:,jwrk)/psnowrho(:,jwrk)) &
170 /max(zsnowd(:),0.0001)
171 psnowswe(:,jwrk)=psnowswe(:,jwrk)-zflux(:)*ptstep
176 IF (lhook) CALL dr_hook(
'HYDRO_GLACIER',1,zhook_handle)
subroutine hydro_glacier(I, PTSTEP, PSR, PSNOWRHO, PSNOWSWE, PGLASTO, PICEFLUX)