6 SUBROUTINE soildif(IO, KK, PK, PEK, DMI, PVEG, PFROZEN1, PFFG, PFFV, PSOILCONDZ, PSOILHCAPZ )
68 USE modd_csts, ONLY :
xcl,
xci,
xrholw,
xrholi,
xpi,
xday,
xcondi,
xtt,
xlmtt,
xg 69 USE modd_isba_par
, ONLY : xcondwtr, xwgmin, xwtd_maxdepth, &
70 xomrho, xomsph, xomconddry, &
88 REAL,
DIMENSION(:),
INTENT(IN) :: PVEG
93 REAL,
DIMENSION(:),
INTENT(OUT) :: PFROZEN1
96 REAL,
DIMENSION(:),
INTENT(IN) :: PFFV, PFFG
102 REAL,
DIMENSION(:,:),
INTENT(OUT) :: PSOILCONDZ, PSOILHCAPZ
108 REAL,
DIMENSION(SIZE(PEK%XTG,1),SIZE(PEK%XTG,2)) :: ZMATPOT, ZCONDDRYZ, ZCONDSLDZ
111 REAL :: ZFROZEN2DF, ZUNFROZEN2DF, ZCONDSATDF, ZLOG_CONDI
114 REAL,
PARAMETER :: ZCTMAX = 1.e-4
116 REAL,
PARAMETER :: ZTHICKM = 0.04
118 REAL,
DIMENSION(SIZE(PVEG)) :: ZFF, ZCF, ZCV
120 REAL,
DIMENSION(SIZE(PVEG)) :: ZWTD
122 INTEGER :: INI, INL, JJ, JL, IDEPTH
124 REAL(KIND=JPRB) :: ZHOOK_HANDLE
146 zwtd(:) = xwtd_maxdepth
148 zwtd(:) = kk%XFWTD(:)/max(-kk%XWTD(:),0.001) + (1.0-kk%XFWTD(:))/max
160 idepth=pk%NWG_LAYER(jj)
164 zwork1 = min(1.0,(pek%XWG(jj,idepth)+pek%XWGI(jj,idepth))/kk%XWSAT
169 zwork1 = 0.5*(pk%XDG(jj,idepth) + pk%XDG(jj,idepth-1))
170 zwork2 = 0.5*(pk%XDG(jj,jl ) + pk%XDG(jj,jl-1))
171 zwork3 = max(0.0,(zwtd(jj)-zwork2)/(zwork2-zwork1))
172 zmatpot(jj,jl) = (kk%XMPOTSAT(jj,jl)+zwork3*zmatpot(jj,idepth))/
175 zwork1 = max(1.0,zmatpot(jj,jl)/kk%XMPOTSAT(jj,jl))
176 zlog = log(zwork1)/kk%XBCOEF(jj,jl)
177 zwtot = kk%XWSAT(jj,jl)*exp(-zlog)
178 zwtot = max(xwgmin,zwtot)
181 zmatpot(jj,jl) = min(kk%XMPOTSAT(jj,jl),
xlmtt*(pek%XTG(jj,jl)-
xtt 183 zwork1 = max(1.0,zmatpot(jj,jl)/kk%XMPOTSAT(jj,jl))
184 zlog = log(zwork1)/kk%XBCOEF(jj,jl)
185 zwl = kk%XWSAT(jj,jl)*exp(-zlog)
186 zwl = max(zwl,xwgmin)
187 pek%XWG (jj,jl) = min(zwl,zwtot )
190 pek%XWGI(jj,jl) = max(0.0,zwtot-pek%XWG(jj,jl))
204 pfrozen1(:) = pek%XWGI(:,1)/(pek%XWGI(:,1) + max(pek%XWG(:,1),xwgmin))
215 zconddryz(:,:) = kk%XCONDDRY (:,:)
216 zcondsldz(:,:) = kk%XCONDSLD (:,:)
218 IF(io%CDIFSFCOND ==
'MLCH')
THEN 223 zvegmulch(jj,jl) = pveg(jj)*min(pk%XDZG(jj,jl),max(0.0,zthickm-pk%XDG
225 IF(zvegmulch(jj,jl)>0.0)
THEN 226 zconddryz(jj,jl) = 1.0/((1.0-zvegmulch(jj,jl))/kk%XCONDDRY(jj
243 zlog_condwtr = log(xcondwtr)
248 zfrozen2df = pek%XWGI(jj,jl)/(pek%XWGI(jj,jl) + max(pek%XWG(jj,jl
252 zwork1 = log(zcondsldz(jj,jl))*(1.0-kk%XWSAT(jj,jl))
253 zwork2 = zlog_condi*(kk%XWSAT(jj,jl)-zunfrozen2df)
254 zwork3 = zlog_condwtr*zunfrozen2df
255 zcondsatdf = exp(zwork1+zwork2+zwork3)
257 zsatdegdf = max(0.1, (pek%XWGI(jj,jl)+pek%XWG(jj,jl))/kk%XWSAT(jj
264 psoilcondz(jj,jl) = zkerstendf*(zcondsatdf-zconddryz(jj,jl)) + zconddryz
278 psoilhcapz(jj,jl) = (1.0-kk%XWSAT(jj,jl))*kk%XHCAPSOIL(jj,jl) +
285 dmi%XCG(:) = 1.0 / ( pk%XDG(:,1) * psoilhcapz(:,1) )
287 dmi%XCG(:) = min(zctmax,dmi%XCG(:))
296 zcv(:) = 1.0 / ( xcvheatf/pek%XCV(:) +
xcl * pek%XWR(:) )
298 zcv(:) = min(zctmax,zcv(:))
307 zff(:) = pveg(:)*pffv(:) + (1.-pveg(:))*pffg(:)
323 dmi%XCT(:) = 1. / ( (1.-pveg(:))*(1.-pffg(:)) / dmi%XCG(:) &
324 + pveg(:) *(1.-pffv(:)) / zcv(:) + zff(:) / zcf(:)
335 idepth=pk%NWG_LAYER(jj)
subroutine soildif(IO, KK, PK, PEK, DMI, PVEG, PFROZEN1, PFFG, PFF