5 SUBROUTINE ice_soilfr(IO, KK, PK, PEK, DMK, PTSTEP, PKSFC_IVEG, PDWGI1, PDWGI2 )
66 USE modd_isba_par
, ONLY : xwgmin, xsphsoil, xdrywght
81 REAL,
INTENT (IN) :: PTSTEP
83 REAL,
DIMENSION(:),
INTENT(IN) :: PKSFC_IVEG
86 REAL,
DIMENSION(:),
INTENT(OUT) :: PDWGI1, PDWGI2
96 REAL,
DIMENSION(SIZE(DMK%XCG)) :: ZKSFC_FRZ, ZFREEZING, ZICE_MELT, ZWIM
117 REAL,
DIMENSION(SIZE(DMK%XCG)) :: ZWSAT_AVGZ
120 REAL,
DIMENSION(SIZE(DMK%XCG)) :: ZPSNG
132 REAL,
PARAMETER :: ZINSOLFRZ_VEG = 0.20
134 REAL,
PARAMETER :: ZINSOLFRZ_LAI = 30.0
136 REAL,
PARAMETER :: ZEFFIC_MIN = 0.01
148 REAL,
DIMENSION(SIZE(DMK%XCG)) :: ZWORK1, ZWORK2, ZTDIURN
150 REAL(KIND=JPRB) :: ZHOOK_HANDLE
163 zsoilheatcap(:) = 0.0
173 inj =
SIZE(pek%XTG,1)
181 IF(pek%TSNOW%SCHEME ==
'3-L' .OR. pek%TSNOW%SCHEME ==
'CRO')
THEN 184 zpsng(:) = pek%XPSNG(:)+kk%XFFG(:)
192 ztauice(:) = max(ptstep,pk%XTAUICE(:))
207 zwsat_avgz(jj) = kk%XWSAT(jj,1)
211 zksfc_frz(jj) = zksoil * pksfc_iveg(jj)
217 IF(io%CSOILFRZ ==
'LWT')
THEN 226 zmatpot(jj) = min(kk%XMPOTSAT(jj,1),
xlmtt*(pek%XTG(jj,1)-
xtt)/(
xg 239 zdeltat(jj) = pek%XTG(jj,1) - ztgmax(jj)
241 zwork2(jj) =
xrholw*pk%XDG(jj,1)
242 zeffic(jj) = max(zeffic_min,(pek%XWG(jj,1)-xwgmin)/zwsat_avgz(jj))
243 zfreezing(jj) = min( max(0.0,pek%XWG(jj,1)-zwgmin(jj))*zwork2(jj),
249 zeffic(jj) = max(zeffic_min,pek%XWGI(jj,1)/(zwsat_avgz(jj)-xwgmin)
258 zwgi1(jj) = pek%XWGI(jj,1) + (ptstep/ztauice(jj))*(1.0-zpsng(jj))*
262 zwgi1(jj) = max( zwgi1(jj) , 0. )
263 zwgi1(jj) = min( zwgi1(jj) , zwsat_avgz(jj)-xwgmin)
267 pdwgi1(jj) = zwgi1(jj) - pek%XWGI(jj,1)
273 pek%XTG(jj,1) = pek%XTG(jj,1) + pdwgi1(jj)*
xlmtt*dmk%XCT(jj)*zwork2(jj
282 zwork1(jj) = pk%XDG(jj,1)/pk%XDG(jj,2)
286 zwim(jj) = ( pek%XWGI(jj,2) - zwork1(jj) * pek%XWGI(jj,1) ) / ( 1. - zwork1
288 zwim(jj) = max(0.,zwim(jj))
293 zwm(jj) = ( pek%XWG(jj,2) - zwork1(jj) * pek%XWG(jj,1) ) / ( 1. - zwork1
300 zsoilheatcap(jj) =
xcl*
xrholw*pek%XWG(jj,2) +
308 ztdiurn(jj) = min(pk%XDG(jj,2), 4./(zsoilheatcap(jj)*dmk%XCG(jj)))
312 ziceeff(jj) = (pek%XWGI(jj,2)/(pek%XWGI(jj,2)+pek%XWG(jj,2)))*pk%XDG
316 IF(io%CSOILFRZ ==
'LWT')
THEN 326 zmatpot(jj) = min(kk%XMPOTSAT(jj,1),
xlmtt*(pek%XTG(jj,2)-
xtt)/(
xg 343 zdeltat(jj) = pek%XTG(jj,2) - ztgmax(jj)
345 zwork1(jj) = pk%XDG(jj,1)/pk%XDG(jj,2)
346 zwork2(jj) =
xrholw*(pk%XDG(jj,2)-pk%XDG(jj,1))
349 IF (ziceeff(jj) <= ztdiurn(jj))
THEN 351 zeffic(jj) = max(zeffic_min, max(0.0,zwm(jj) - xwgmin)/zwsat_avgz
360 zeffic(jj) = max(zeffic_min, zwim(jj)/(zwsat_avgz(jj)-xwgmin))
361 zice_melt(jj) = min( zwim(jj)*zwork2(jj), &
362 zksoil*zeffic(jj)*max( zdeltat(jj) , 0. ) )
368 zwit(jj) = zwim(jj) + (ptstep/ztauice(jj))*(1.0-zpsng(jj))* &
369 ((zfreezing(jj) - zice_melt(jj))/ zwork2(jj))
371 zwit(jj) = max( zwit(jj) , 0. )
372 zwit(jj) = min( zwit(jj) , zwsat_avgz(jj)-xwgmin)
378 zwgi2(jj) = (1.-zwork1(jj))*zwit(jj) + zwork1(jj)*zwgi1(jj)
380 pdwgi2(jj) = zwgi2(jj) - pek%XWGI(jj,2)
386 pek%XTG(jj,2) = pek%XTG(jj,2) + pdwgi2(jj)*
xlmtt*dmk%XCG(jj)*
xrholw*pk%XDG
subroutine ice_soilfr(IO, KK, PK, PEK, DMK, PTSTEP, PKSFC_IVEG, PD