215 & ( im, km, grav, cp, hvap, rd, eps, epsm1, rvrdm1, ps, &
216 & t1, q1, soiltyp, vegtype, sigmaf, &
217 & sfcemis, dlwflx, dswsfc, delt, tg3, cm, ch, &
218 & prsl1, prslki, zf, land, wind, slopetyp, &
219 & shdmin, shdmax, snoalb, sfalb, flag_iter, flag_guess, &
220 & lheatstrg, isot, ivegsrc, &
221 & bexppert, xlaipert, vegfpert,pertvegf, &
222 & albdvis_lnd, albdnir_lnd, albivis_lnd, albinir_lnd, &
223 & adjvisbmd, adjnirbmd, adjvisdfd, adjnirdfd, rhonewsn1, &
226 & weasd, snwdph, tskin, tprcp, srflag, smc, stc, slc, &
227 & canopy, trans, tsurf, zorl, &
229 & sncovr1, qsurf, gflux, drain, evap, hflx, ep, runoff, &
230 & cmm, chh, evbs, evcw, sbsno, snowc, stm, snohf, &
231 & smcwlt2, smcref2, wet1, lai, rca, errmsg, errflg &
235 use funcphys,
only : fpvs
242 real(kind=kind_phys),
parameter :: zero = 0.0_kind_phys
243 real(kind=kind_phys),
parameter :: one = 1.0_kind_phys
244 real(kind=kind_phys),
parameter :: rhoh2o = 1000.0_kind_phys
245 real(kind=kind_phys),
parameter :: a2 = 17.2693882_kind_phys
246 real(kind=kind_phys),
parameter :: a3 = 273.16_kind_phys
247 real(kind=kind_phys),
parameter :: a4 = 35.86_kind_phys
248 real(kind=kind_phys),
parameter :: a23m4 = a2*(a3-a4)
249 real(kind=kind_phys),
parameter :: qmin = 1.0e-8_kind_phys
251 real(kind=kind_phys),
save :: zsoil_noah(4)
252 data zsoil_noah / -0.1_kind_phys, -0.4_kind_phys, &
253 & -1.0_kind_phys, -2.0_kind_phys /
256 integer,
intent(in) :: im, km, isot, ivegsrc
257 real (kind=kind_phys),
intent(in) :: grav, cp, hvap, rd, eps, &
259 real (kind=kind_phys),
intent(in) :: pertvegf
261 integer,
dimension(:),
intent(in) :: soiltyp, vegtype, slopetyp
263 real (kind=kind_phys),
dimension(:),
intent(in) :: ps, &
264 & t1, q1, sigmaf, sfcemis, dlwflx, dswsfc, tg3, cm, &
265 & ch, prsl1, prslki, wind, shdmin, shdmax, &
266 & snoalb, sfalb, zf, &
267 & bexppert, xlaipert, vegfpert, &
268 & albdvis_lnd, albdnir_lnd, albivis_lnd, albinir_lnd, &
269 & adjvisbmd, adjnirbmd, adjvisdfd, adjnirdfd, rhonewsn1
271 real (kind=kind_phys),
intent(in) :: delt
273 logical,
dimension(:),
intent(in) :: flag_iter, flag_guess, land
275 logical,
intent(in) :: lheatstrg, exticeden
278 real (kind=kind_phys),
dimension(:),
intent(inout) :: weasd, &
279 & snwdph, tskin, tprcp, srflag, canopy, trans, tsurf, zorl
281 real (kind=kind_phys),
dimension(:,:),
intent(inout) :: &
285 real (kind=kind_phys),
dimension(:),
intent(inout) :: sncovr1, &
286 & qsurf, gflux, drain, evap, hflx, ep, runoff, cmm, chh, &
287 & evbs, evcw, sbsno, snowc, stm, snohf, smcwlt2, smcref2
288 real (kind=kind_phys),
dimension(:),
intent(inout),
optional :: &
291 character(len=*),
intent(out) :: errmsg
292 integer,
intent(out) :: errflg
295 real (kind=kind_phys),
dimension(im) :: rch, rho, &
296 & q0, qs1, theta1, weasd_old, snwdph_old, &
297 & tprcp_old, srflag_old, tskin_old, canopy_old
299 real (kind=kind_phys),
dimension(km) :: et, sldpth, stsoil, &
302 real (kind=kind_phys),
dimension(im,km) :: zsoil, smc_old, &
305 real (kind=kind_phys) :: alb,
albedo, beta, chx, cmx, cmc, &
306 & dew, drip, dqsdt2, ec, edir, ett, eta, esnow, etp, &
307 & flx1, flx2, flx3, ffrozp, lwdn, pc, prcp, ptu, q2, &
308 & q2sat, solnet, rc, rcs, rct, rcq, rcsoil, rsmin, &
309 & runoff1, runoff2, runoff3, sfcspd, sfcprs, sfctmp, &
310 & sfcems, sheat, shdfac, shdmin1d, shdmax1d, smcwlt, &
311 & smcdry, smcref, smcmax, sneqv, snoalb1d, snowh, &
312 & snomlt, sncovr, soilw, soilm, ssoil, tsea, th2, tbot, &
313 & xlai, zlvl, swdn, tem, z0, bexpp, xlaip, vegfp, &
314 & mv, sv, alphav, betav, vegftmp, cpinv, hvapi, elocp, &
316 integer :: couple, ice, nsoil, nroot, slope, stype, vtype
317 integer :: i, k, iflag
332 if (land(i) .and. flag_guess(i))
then
333 weasd_old(i) = weasd(i)
334 snwdph_old(i) = snwdph(i)
335 tskin_old(i) = tskin(i)
336 canopy_old(i) = canopy(i)
337 tprcp_old(i) = tprcp(i)
338 srflag_old(i) = srflag(i)
340 smc_old(i,k) = smc(i,k)
341 stc_old(i,k) = stc(i,k)
342 slc_old(i,k) = slc(i,k)
350 if (flag_iter(i) .and. land(i))
then
356 canopy(i) = max(canopy(i), zero)
366 q0(i) = max(q1(i), qmin)
367 theta1(i) = t1(i) * prslki(i)
369 rho(i) = prsl1(i) / (rd*t1(i)*(one+rvrdm1*q0(i)))
370 qs1(i) = fpvs( t1(i) )
371 qs1(i) = max(eps*qs1(i) / (prsl1(i)+epsm1*qs1(i)), qmin)
372 q0(i) = min(qs1(i), q0(i))
374 zsoil(i,k) = zsoil_noah(k)
400 sldpth(1) = - zsoil(i,1)
402 sldpth(k) = zsoil(i,k-1) - zsoil(i,k)
417 solnet = adjvisbmd(i)*(1-albdvis_lnd(i)) &
418 & +adjnirbmd(i)*(1-albdnir_lnd(i)) &
419 & +adjvisdfd(i)*(1-albivis_lnd(i)) &
420 & +adjnirdfd(i)*(1-albinir_lnd(i))
425 prcp = rhoh2o * tprcp(i) / delt
437 dqsdt2 = q2sat * a23m4/(sfctmp-a4)**2
465 if (pertvegf>zero)
then
468 sv = pertvegf*mv*(one-mv)
469 alphav = mv*mv*(one-mv)/(sv*sv)-mv
470 betav = alphav*(one-mv)/mv
473 call ppfbet(vegfp,alphav,betav,iflag,vegftmp)
499 cmc = canopy(i) * 0.001_kind_phys
508 snowh = snwdph(i) * 0.001_kind_phys
509 sneqv = weasd(i) * 0.001_kind_phys
510 if (sneqv /= zero .and. snowh == zero)
then
511 snowh = 10.0_kind_phys * sneqv
514 chx = ch(i) * wind(i)
515 cmx = cm(i) * wind(i)
516 chh(i) = chx * rho(i)
520 z0 = zorl(i) * 0.01_kind_phys
526 rhonewsn = rhonewsn1(i)
531 & ( nsoil, couple, ice, ffrozp, delt, zlvl, sldpth, &
532 & swdn, solnet, lwdn, sfcems, sfcprs, sfctmp, &
533 & sfcspd, prcp, q2, q2sat, dqsdt2, th2, ivegsrc, &
534 & vtype, stype, slope, shdmin1d, alb, snoalb1d, &
535 & rhonewsn, exticeden, &
539 & tbot, cmc, tsea, stsoil, smsoil, slsoil, sneqv, chx, cmx, &
542 & nroot, shdfac, snowh,
albedo, eta, sheat, ec, &
543 & edir, et, ett, esnow, drip, dew, beta, etp, ssoil, &
544 & flx1, flx2, flx3, runoff1, runoff2, runoff3, &
545 & snomlt, sncovr, rc, pc, rsmin, xlai, rcs, rct, rcq, &
546 & rcsoil, soilw, soilm, smcwlt, smcdry, smcref, smcmax, &
570 stm(i) = soilm * 1000.0_kind_phys
571 snohf(i) = flx1 + flx2 + flx3
584 wet1(i) = smsoil(1) / smcmax
587 runoff(i) = runoff1 * 1000.0_kind_phys
588 drain(i) = runoff2 * 1000.0_kind_phys
591 canopy(i) = cmc * 1000.0_kind_phys
592 snwdph(i) = snowh * 1000.0_kind_phys
593 weasd(i) = sneqv * 1000.0_kind_phys
596 zorl(i) = z0*100.0_kind_phys
644 rch(i) = rho(i) * cp * ch(i) * wind(i)
645 qsurf(i) = q1(i) + evap(i) / (elocp * rch(i))
650 hflx(i) = hflx(i) * tem * cpinv
651 evap(i) = evap(i) * tem * hvapi
660 if (flag_guess(i))
then
661 weasd(i) = weasd_old(i)
662 snwdph(i) = snwdph_old(i)
663 tskin(i) = tskin_old(i)
664 canopy(i) = canopy_old(i)
665 tprcp(i) = tprcp_old(i)
666 srflag(i) = srflag_old(i)
669 smc(i,k) = smc_old(i,k)
670 stc(i,k) = stc_old(i,k)
671 slc(i,k) = slc_old(i,k)
subroutine gfssflx(nsoil, couple, icein, ffrozp, dt, zlvl, sldpth, swdn, swnet, lwdn, sfcems, sfcprs, sfctmp, sfcspd, prcp, q2, q2sat, dqsdt2, th2, ivegsrc, vegtyp, soiltyp, slopetyp, shdmin, alb, snoalb, rhonewsn, exticeden, bexpp, xlaip, lheatstrg, tbot, cmc, t1, stc, smc, sh2o, sneqv, ch, cm, z0, nroot, shdfac, snowh, albedo, eta, sheat, ec, edir, et, ett, esnow, drip, dew, beta, etp, ssoil, flx1, flx2, flx3, runoff1, runoff2, runoff3, snomlt, sncovr, rc, pc, rsmin, xlai, rcs, rct, rcq, rcsoil, soilw, soilm, smcwlt, smcdry, smcref, smcmax, errmsg, errflg)
This is the entity of GFS Noah LSM model of physics subroutines. It is a soil/veg/snowpack land-surfa...
subroutine, public lsm_noah_run(im, km, grav, cp, hvap, rd, eps, epsm1, rvrdm1, ps, t1, q1, soiltyp, vegtype, sigmaf, sfcemis, dlwflx, dswsfc, delt, tg3, cm, ch, prsl1, prslki, zf, land, wind, slopetyp, shdmin, shdmax, snoalb, sfalb, flag_iter, flag_guess, lheatstrg, isot, ivegsrc, bexppert, xlaipert, vegfpert, pertvegf, albdvis_lnd, albdnir_lnd, albivis_lnd, albinir_lnd, adjvisbmd, adjnirbmd, adjvisdfd, adjnirdfd, rhonewsn1, exticeden, weasd, snwdph, tskin, tprcp, srflag, smc, stc, slc, canopy, trans, tsurf, zorl, sncovr1, qsurf, gflux, drain, evap, hflx, ep, runoff, cmm, chh, evbs, evcw, sbsno, snowc, stm, snohf, smcwlt2, smcref2, wet1, lai, rca, errmsg, errflg)