99 LOGICAL,
DIMENSION(nt,np),
INTENT(in) :: &
101 TYPE(t_atm),
DIMENSION(np),
INTENT(in) :: &
103 TYPE(t_blk),
DIMENSION(nt,np),
INTENT(in) :: &
105 TYPE(t_dia),
DIMENSION(np),
INTENT(inout) :: &
107 TYPE(t_sit),
DIMENSION(nt,np),
INTENT(inout) :: &
109 REAL,
DIMENSION(nt,np),
INTENT(inout) :: &
112 LOGICAL,
DIMENSION(nt,np) :: &
118 REAL,
DIMENSION(np) :: &
120 REAL,
DIMENSION(nt,np) :: &
121 zvmp, zpcpr, ztsf,zmeltt, zmelts, &
122 zfmp, zdmp, zamp, zdiftp, zfblki
129 zvmp(:,:) = tpsit(:,:)%vmp
131 ztsf(:,:) = tpsit(:,:)%tsf
138 zpcpr(:,:) = spread( tpatm(:)%lip,1,nt)
143 WHERE ( tpsit(:,:)%hsi>= hsi_mp .AND. tpsit(:,:)%hsn >= hsn_mp .AND. omelt(:,:) )
144 gsnpond(:,:) = .true.
150 WHERE ( tpsit(:,:)%hsi>= hsi_mp .AND. tpsit(:,:)%hsn < hsn_mp .AND. omelt(:,:) )
151 gsipond(:,:) = .true.
160 zwork2(:) = ( sum( tpsit(:,:)%rsn*tpsit(:,:)%fsi*tpsit(:,:)%hsn, dim=1 )- &
163 zwork2(:) = max( -zwork2(:),0. )
167 zmeltt(:,:) = spread( -tpdia(:)%mrt, 1, nt )
168 zmelts(:,:) = spread( -zwork2(:), 1, nt)
174 WHERE ( ( tp - ztsf(:,:) ) >= epsil5 )
175 zdiftp(:,:) = ( tp - ztsf(:,:) ) / tp
182 zfblki(:,:) = tpblki(:,:)%nsf + tpblki(:,:)%swa
184 zrhwinv = dtt / rhofw
210 IF ( gsnpond(jt,jp) )
THEN
220 zvmp(jt,jp) = zvmp(jt,jp) + &
221 zrhwinv * ( zmeltt(jt,jp) + zmelts(jt,jp) + zpcpr(jt,jp) )
233 ELSE IF ( gsipond(jt,jp) )
THEN
248 zvmp(jt,jp) = zvmp(jt,jp) + xr1 * &
249 zrhwinv * ( zmeltt(jt,jp) + zmelts(jt,jp) + zpcpr(jt,jp) )
258 zvmp(jt,jp) = zvmp(jt,jp) + &
259 amin1( zrhwinv * hofusni0 * rhoice0 * zfblki(jt,jp), 0.)
266 zdelta = amax1( dptfr2 * dptfr2 + 4.*dptfr1*zvmp(jt,jp),0. )
268 zfmp(jt,jp) = 0.5*(- dptfr2 + sqrt(zdelta) ) / dptfr1
269 zfmp(jt,jp) = amin1( zfmp(jt,jp),1. )
270 zdmp(jt,jp) = amax1( dptfr1 * zfmp(jt,jp) + dptfr2, 0. )
275 zdmp(jt,jp) = amin1( zdmp(jt,jp), dpthhi * tpsit(jt,jp)%hsi )
280 zvmp(jt,jp) = zfmp(jt,jp) * zdmp(jt,jp)
290 zvmp(jt,jp) = zvmp(jt,jp) + &
291 amin1( zrhwinv * hofusni0 * rhoice0 * zfblki(jt,jp), 0.)
298 zdelta = amax1( dptfr2 * dptfr2 + 4.*dptfr1*zvmp(jt,jp), 0. )
299 zfmp(jt,jp) = 0.5*(- dptfr2 + sqrt(zdelta) ) / dptfr1
300 zfmp(jt,jp) = amin1( zfmp(jt,jp),1. )
301 zdmp(jt,jp) = amax1( dptfr1 * zfmp(jt,jp) + dptfr2, 0. )
306 zvmp(jt,jp) = amax1(zvmp(jt,jp),0.)
312 WHERE (zvmp(:,:)<1e-8)
320 WHERE (zdmp(:,:)<epsil5)
335 tpsit(:,:)%vmp = zvmp(:,:)
344 zamp(:,:) = xwmp1 * (xamp1 + exp(-xbmp1*zdmp(:,:)-xcmp1))
345 zamp(:,:) = zamp(:,:) + xwmp2 * (xamp2 + exp(-xbmp2*zdmp(:,:)-xcmp2))
346 zamp(:,:) = zamp(:,:) + xwmp3 * (xamp3 + exp(-xbmp3*zdmp(:,:)-xcmp3))
347 zamp(:,:) = zamp(:,:) + xwmp4 * xamp4
352 pasi(:,:) = (1.-zfmp(:,:)) * pasi(:,:) + zfmp(:,:) * zamp(:,:)
355 tpdia(:)%amp = sum( tpsit(:,:)%fsi * pasi(:,:), dim=1 )