30     &     ( tkelv, smc, sh2o, smcmax, bexp, psis,                      
 
   75      real, 
parameter :: gs2     = 9.81
 
   76      real, 
parameter :: tfreez  = 2.7315e+2
 
   77      real, 
parameter :: lsubf   = 3.335e5     
 
   80      real, 
parameter :: ck    = 8.0
 
   81      real, 
parameter :: blim  = 5.5
 
   82      real, 
parameter :: error = 0.005
 
   85      real, 
intent(in) :: tkelv, smc, sh2o, smcmax, bexp, psis
 
   88      real, 
intent(out) :: liqwat
 
   91      real :: bx, denom, df, dswl, fk, swl, swlk
 
   93      integer :: nlog, kcount
 
  102      if (bexp > blim)  bx = blim
 
  111      if (tkelv > (tfreez-1.e-3)) 
then 
  128          swl = max( min( swl, smc-0.02 ), 0.0 )
 
  132          do while ( (nlog < 10) .and. (kcount == 0) )
 
  135            df = alog( (psis*gs2/lsubf) * ( (1.0 + ck*swl)**2.0 )      &
 
  136              * (smcmax/(smc-swl))**bx ) - alog(-(tkelv-tfreez)/tkelv)
 
  138            denom = 2.0*ck/(1.0 + ck*swl) + bx/(smc - swl)
 
  139            swlk  = swl - df/denom
 
  143            swlk = max( min( swlk, smc-0.02 ), 0.0 )
 
  147            dswl = abs(swlk - swl)
 
  153            if ( dswl <= error )  
then 
  168        if (kcount == 0) 
then 
  169          fk = ( ( (lsubf/(gs2*(-psis)))                   & 
 
  170            * ((tkelv-tfreez)/tkelv) )**(-1/bx) ) * smcmax
 
  174          liqwat = min( fk, smc )