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 )
subroutine, public frh2o
Calculate the liquid water (slc) for a given total moisture content and soil temperature.