6 SUBROUTINE soil( IO, KK, PK, PEK, DMI, PVEG, PCS, PFROZEN1, PFFG_NOSNOW, PFFV_NOSNOW )
73 USE modd_isba_par
, ONLY : xcondwtr, xwgmin
75 USE modd_deepsoil
, ONLY : lphysdomc
91 REAL,
DIMENSION(:),
INTENT(IN) :: PVEG
93 REAL,
DIMENSION(:),
INTENT(OUT) :: PCS, PFROZEN1
99 REAL,
DIMENSION(:),
INTENT(IN) :: PFFG_NOSNOW, PFFV_NOSNOW
103 REAL,
DIMENSION(SIZE(PVEG)) :: ZLAMS, &
106 zcw1max, zx2, zy1, zy2, &
107 zlymy1, zza, zzb, zdelta, &
131 REAL,
DIMENSION(SIZE(PVEG)) :: ZFROZEN2, ZUNFROZEN2, ZCONDSAT, ZSATDEG,
142 REAL,
DIMENSION(SIZE(PVEG)) :: ZWG2
145 REAL,
DIMENSION(SIZE(PVEG)) :: ZCF
146 REAL,
DIMENSION(SIZE(PVEG)) :: ZFF
149 REAL(KIND=JPRB) :: ZHOOK_HANDLE
186 WHERE (pek%XWGI(:,1) + pek%XWG(:,1) .NE. 0.)
187 pfrozen1(:) = pek%XWGI(:,1) / (pek%XWGI(:,1) + pek%XWG(:,1))
190 DO jj=1,
SIZE(kk%XWSAT,1)
192 zwsat(jj) = max(kk%XWSAT(jj,1) - pek%XWGI(jj,2),xwgmin)
194 zwsat1(jj) = max(kk%XWSAT(jj,1) - pek%XWGI(jj,1),xwgmin)
196 zwwilt(jj) = kk%XWWILT(jj,1) * (zwsat1(jj) / kk%XWSAT(jj,1))
204 IF(io%CSCOND ==
'NP89')
THEN 220 dmi%XCG(:) = (1.-pek%XWGI(:,2)) * kk%XCGSAT(:) * ( zwsat(:)/pek%XWG(:,
234 DO jj=1,
SIZE(pek%XWG,1)
238 zfrozen2(jj) = pek%XWGI(jj,2)/(pek%XWGI(jj,2) + pek%XWG(jj,2))
242 zunfrozen2(jj) = (1.0-zfrozen2(jj))*kk%XWSAT(jj,1)
246 zcondsat(jj) = (kk%XCONDSLD(jj,1)**(1.0-kk%XWSAT(jj,1)))* (
xcondi*
251 zsatdeg(jj) = max(0.1, (pek%XWGI(jj,2)+pek%XWG(jj,2))/kk%XWSAT(jj,
255 zkersten(jj) = log10(zsatdeg(jj)) + 1.0
261 zkersten(jj) = (1.0-zfrozen2(jj))*zkersten(jj) + &
262 zfrozen2(jj) *zsatdeg(jj)
266 zcond(jj) = zkersten(jj)*(zcondsat(jj)-kk%XCONDDRY(jj,1)) + kk%XCONDDRY
270 zhcap(jj) = (1.0-kk%XWSAT(jj,1)) * kk%XHCAPSOIL(jj,1) + &
276 dmi%XCG(jj) = 2.*sqrt(
xpi/zcond(jj)/zhcap(jj)/
xday)
284 dmi%XCG(:) = min( dmi%XCG(:), io%XCGMAX )
291 WHERE (kk%XFF(:) > 0.)
295 IF(pek%TSNOW%SCHEME ==
'D95' .OR. (pek%TSNOW%SCHEME ==
'EBA' .AND. io%LGLACIER
THEN 297 WHERE (pek%XPSN(:) > 0.)
300 pcs(:) = 2.0 * sqrt(
xpi/(zlams(:)*pek%TSNOW%RHO(:,1)*
xci*
xday)
311 dmi%XCT(:) = 1. / ( (1.-pveg(:))*(1.-pek%XPSNG(:)-kk%XFFG(:)) / dmi%XCG
321 zff(jj) = pveg(jj)*pffv_nosnow(jj) + (1.-pveg(jj))*pffg_nosnow(jj)
326 dmi%XCT(jj) = 1. / ( (1.-pveg(jj))*(1.-pffg_nosnow(jj)) / dmi%XCG(jj
341 zc1sat(:) = pk%XC1SAT(:)*sqrt(zwsat1(:)/kk%XWSAT(:,1))
348 WHERE (pek%XWG(:,1) > zwwilt(:))
353 dmi%XC1(:) = zc1sat(:) * ( zwsat1(:)/pek%XWG(:,1) )**( 0.5*kk%XBCOEF
369 IF(io%CC1DRY==
'GB93')
THEN 371 DO jj=1,
SIZE(pek%XWG,1)
373 IF (pek%XWG(jj,1) <= zwwilt(jj))
THEN 381 zcw1max(jj) = ( 1.19*zwwilt(jj)-5.09 )*pek%XTG(jj,1) + (-146.
385 za(jj) = (-1.815e-2*pek%XTG(jj,1)+6.41)*zwwilt(jj) + (6
389 dmi%XC1(jj) = zcw1max(jj)*(1. - 2.*pveg(jj)*( 1.-pveg(jj) ))
398 DO jj=1,
SIZE(pek%XWG,1)
400 IF (pek%XWG(jj,1) <= zwwilt(jj))
THEN 404 zcw1max(jj) = ( 1.19*zwwilt(jj)-5.09 )*pek%XTG(jj,1) + (-146.
413 zy2(jj) = zc1sat(jj)*(zwsat1(jj)/zwwilt(jj))**( 0.5*kk%XBCOEF(jj,
417 zcw1max(jj) = max(max(zcw1max(jj),zy2(jj)),zy1(jj))
421 zlymy1(jj) = log( zcw1max(jj)/zy1(jj))
422 zza(jj) = - log( zy2(jj)/zy1(jj))
423 zzb(jj) = 2. * zx2(jj) * zlymy1(jj)
424 zdelta(jj) = 4. * (zlymy1(jj)+zza(jj)) * zlymy1(jj) * zx2(jj)**2
426 za(jj) = (-zzb(jj)+sqrt(zdelta(jj))) / (2.*zza(jj))
428 zb(jj) = za(jj)**2 / zlymy1(jj)
431 dmi%XC1(jj) = zcw1max(jj) * exp( - (pek%XWG(jj,1)-za(jj))**2 / zb
444 IF(io%CKSAT==
'SGH' .OR. io%CKSAT==
'EXP')
THEN 448 DO jj=1,
SIZE(pek%XWG,1)
449 zwg2(jj)=pek%XWG(jj,2)*(pk%XCONDSAT(jj,2)/pk%XCONDSAT(jj,1))**(1./(
451 zwg2(:)=max(zwg2(:),xwgmin)
463 dmi%XC2(jj) = (pk%XC2REF(jj)*zwg2(jj) / ( zwsat(jj)-zwg2(jj) + 0.01 ))
471 zx(jj) = zwg2(jj)/zwsat(jj)
473 dmi%XWGEQ(jj) = zwg2(jj) - zwsat(jj)*kk%XACOEF(jj) * zx(jj)**kk%XPCOEF
483 dmi%XCT(:) = 9.427757e-6
subroutine soil(IO, KK, PK, PEK, DMI, PVEG, PCS, PFROZEN1, PFFG_N