00001
00002
00003
00004 subroutine begtem(sib,sib_loc)
00005
00006
00007 use kinds
00008 use sibtype
00009
00010 use physical_parameters, only: &
00011 cp => spec_heat_cp, &
00012 grav, &
00013 hltm, &
00014 tice
00015
00016 use sib_const_module, only: &
00017 nsoil, &
00018 denh2o, &
00019 denice, &
00020 tkwat, &
00021 tkice, &
00022 tkair, &
00023 cww, &
00024 clai, &
00025 cv, &
00026 cpice, &
00027 cpliq
00028
00029 implicit none
00030
00031
00032
00033 type(sib_t), intent(inout) :: sib
00034
00035 type(sib_local_vars) ,intent(inout) :: sib_loc
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086 integer :: i,j
00087 real(kind=dbl_kind) ::
00088 one,
00089 satw,
00090 fl,
00091 dke,
00092 bw,
00093 fac,
00094 psit,
00095 argg,
00096 phroot
00097
00098
00099
00100 real(kind=dbl_kind), dimension(nsoil) ::
00101 dksat,
00102 phroot_layer,
00103 vwc
00104
00105
00106 real(kind=dbl_kind), dimension(-nsnow+1:nsoil) ::
00107 thk
00108
00109 real(kind=dbl_kind),dimension(1) :: ppl,ttl,esst,dtesst
00110
00111
00112
00113
00114
00115 one = 1.0
00116
00117
00118
00119
00120 sib%param%czc = sib%param%zlt*clai+(0.5*sib%prog%snow_veg/denice + &
00121 sib%prog%capac(1)/denh2o)*cww
00122 sib%diag%psy = cp / hltm * sib%prog%ps / .622
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132 do j=1,nsoil
00133
00134
00135 satw = ((sib%prog%www_liq(j)/denh2o) + (sib%prog%www_ice(j)/denice))/ &
00136 (sib%prog%dz(j) * sib%param%poros)
00137
00138
00139 satw = min(1.0_dbl_kind,satw)
00140
00141 if(satw > 1.0E-6) then
00142 fl = sib%prog%www_liq(j) / (sib%prog%www_liq(j) + &
00143 sib%prog%www_ice(j))
00144
00145 if(sib%prog%td(j) >= tice) then
00146
00147 dke = max(0.0_dbl_kind, log10(satw) + 1.0_dbl_kind)
00148 dksat(j) = sib%param%tksatu(j)
00149 else
00150 dke = satw
00151 dksat(j) = sib%param%tkmg(j) * 0.249**(fl*sib%param%poros) &
00152 *2.29**sib%param%poros
00153 endif
00154
00155 thk(j) = dke*dksat(j) + (1.0-dke)*sib%param%tkdry(j)
00156
00157 else
00158 thk(j) = sib%param%tkdry(j)
00159 endif
00160
00161 enddo
00162
00163
00164 if (sib%prog%nsl < 0) then
00165 do j= sib%prog%nsl+1,0
00166 bw = (sib%prog%www_liq(j) + sib%prog%www_ice(j))/sib%prog%dz(j)
00167 thk(j) = tkair + (7.75E-5*bw + 1.105E-6*bw*bw)*(tkice-tkair)
00168 enddo
00169 endif
00170
00171
00172 do j = sib%prog%nsl+1,nsoil-1
00173
00174 sib%param%tksoil(j) = thk(j)*thk(j+1)* &
00175 (sib%prog%node_z(j+1)-sib%prog%node_z(j)) &
00176 /(thk(j)*(sib%prog%node_z(j+1)-sib%prog%layer_z(j)) + &
00177 thk(j+1)*(sib%prog%layer_z(j)-sib%prog%node_z(j)))
00178
00179 enddo
00180
00181
00182
00183
00184 sib%param%tksoil(nsoil) = sib%param%tksoil(nsoil-1)
00185
00186
00187 do j=1,nsoil
00188 sib%param%shcap(j) = sib%param%csolid(j)*(1.0-sib%param%poros)*sib%prog%dz(j) &
00189 + sib%prog%www_ice(j)*cpice + sib%prog%www_liq(j)*cpliq
00190 enddo
00191
00192
00193
00194 if(sib%prog%nsl < 0) then
00195 do j=sib%prog%nsl+1,0
00196 sib%param%shcap(j) = cpliq*sib%prog%www_liq(j) + &
00197 cpice*sib%prog%www_ice(j)
00198 enddo
00199 endif
00200
00201
00202
00203
00204
00205 do j=sib%prog%nsl+1,nsoil-1
00206 sib%param%slamda(j) = sib%param%tksoil(j) / (sib%prog%node_z(j+1) - &
00207 sib%prog%node_z(j))
00208 enddo
00209
00210
00211
00212 sib%param%slamda(nsoil) = sib%param%slamda(nsoil-1)
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224 ppl(1) = sib%prog%ps*100.0
00225 ttl(1) = sib%prog%tc
00226
00227 call dtess_eau(1,ppl,ttl,esst,dtesst)
00228
00229 sib_loc%etc = esst(1)
00230 sib_loc%getc = dtesst(1)
00231
00232 ttl(1) = sib%prog%td(sib%prog%nsl+1)
00233
00234 call dtess_eau(1,ppl,ttl,esst,dtesst)
00235
00236 sib_loc%etg = esst(1)
00237 sib_loc%getg = dtesst(1)
00238
00239
00240 sib_loc%etc = sib_loc%etc/100.0
00241 sib_loc%getc = sib_loc%getc/100.0
00242 sib_loc%etg = sib_loc%etg/100.0
00243 sib_loc%getg = sib_loc%getg/100.0
00244
00245
00246 if(sib%prog%nsl < 0 ) then
00247 ttl(1) = sib%prog%td(sib%prog%nsl+1)
00248
00249 call dtess_eau(1,ppl,ttl,esst,dtesst)
00250
00251 sib_loc%ets = esst(1)/100.0
00252 sib_loc%gets = dtesst(1)/100.0
00253
00254 else
00255 sib_loc%ets = sib_loc%etg
00256 sib_loc%gets = sib_loc%getg
00257 endif
00258
00259
00260
00261 sib%diag%wc = MIN( one,( sib%prog%capac(1)/denh2o + &
00262 sib%prog%snow_veg)/sib%param%satcap(1) )
00263
00264 sib%diag%wg = MAX( 0.*one, &
00265 (sib%prog%capac(2)/(sib%param%satcap(2)*denh2o)) )*0.25
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286 sib%diag%wssp = 0.2
00287
00288 sib%diag%paw_tot = 0.0
00289 sib%diag%paw_max = 0.0
00290 sib%diag%paw(:) = 0.0
00291
00292
00293
00294
00295
00296 do i=1,nsoil
00297 sib%prog%vol_ice(i) = min(sib%param%poros,sib%prog%www_ice(i)/ &
00298 (sib%prog%dz(i)*denice))
00299 sib%diag%eff_poros(i) = sib%param%poros - sib%prog%vol_ice(i)
00300 sib%prog%vol_liq(i) = min(sib%diag%eff_poros(i), &
00301 sib%prog%www_liq(i)/(sib%prog%dz(i)*denh2o))
00302
00303 sib%diag%paw(i) = sib%prog%vol_liq(i) - sib%param%vwcmin
00304 sib%diag%paw(i) = max(sib%diag%paw(i),0.0_dbl_kind)
00305 sib%diag%paw_tot = sib%diag%paw_tot + &
00306 sib%diag%paw(i) * sib%prog%dz(i)
00307 sib%diag%paw_max = sib%diag%paw_max + &
00308 ((sib%param%fieldcap - sib%param%vwcmin) * sib%prog%dz(i))
00309 enddo
00310
00311
00312
00313
00314 sib%diag%pawfrac = sib%diag%paw_tot/sib%diag%paw_max
00315 sib%diag%pawfrac = MAX(0.0_dbl_kind, sib%diag%pawfrac)
00316 sib%diag%pawfrac = MIN(sib%diag%pawfrac, 1.0_dbl_kind)
00317
00318 sib%diag%rstfac(2) = ((1+sib%diag%wssp) * sib%diag%pawfrac)/ &
00319 (sib%diag%wssp + sib%diag%pawfrac)
00320
00321
00322
00323
00324
00325 sib%diag%rstfac(2) = MAX(sib%diag%rstfac(2), 0.1_dbl_kind)
00326
00327
00328
00329
00330
00331
00332
00333
00334
00335
00336
00337
00338
00339
00340 fac = MIN( sib%prog%www_liq(1)/ &
00341 (sib%param%poros*sib%prog%dz(1)*denh2o) + &
00342 sib%prog%www_ice(1)/ &
00343 (sib%param%poros*sib%prog%dz(1)*denice), one )
00344
00345
00346
00347
00348
00349 fac = MAX( fac, 0.02*one )
00350
00351 sib%diag%rsoil = exp(8.206 - 4.255 * fac)
00352
00353 psit = sib%param%phsat * fac ** (- sib%param%bee )
00354 argg = max(-10.*one,(psit*grav/ (461.5*sib%prog%td(sib%prog%nsl+1)) ))
00355 sib%diag%hr = exp(argg)
00356
00357
00358 sib%diag%cas_cap_heat = sib%prog%ros * cp * max(4.0_dbl_kind,sib%param%z2)
00359 sib%diag%cas_cap_vap = sib%prog%ros * cv * max(4.0_dbl_kind,sib%param%z2) &
00360 / sib%diag%psy
00361 sib%diag%cas_cap_co2 = max(4.0_dbl_kind,sib%param%z2)
00362
00363
00364
00365 end subroutine begtem