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) :: lai, rca
289 real (kind=kind_phys),
dimension(:),
intent(inout),
optional :: &
292 character(len=*),
intent(out) :: errmsg
293 integer,
intent(out) :: errflg
296 real (kind=kind_phys),
dimension(im) :: rch, rho, &
297 & q0, qs1, theta1, weasd_old, snwdph_old, &
298 & tprcp_old, srflag_old, tskin_old, canopy_old
300 real (kind=kind_phys),
dimension(km) :: et, sldpth, stsoil, &
303 real (kind=kind_phys),
dimension(im,km) :: zsoil, smc_old, &
306 real (kind=kind_phys) :: alb,
albedo, beta, chx, cmx, cmc, &
307 & dew, drip, dqsdt2, ec, edir, ett, eta, esnow, etp, &
308 & flx1, flx2, flx3, ffrozp, lwdn, pc, prcp, ptu, q2, &
309 & q2sat, solnet, rc, rcs, rct, rcq, rcsoil, rsmin, &
310 & runoff1, runoff2, runoff3, sfcspd, sfcprs, sfctmp, &
311 & sfcems, sheat, shdfac, shdmin1d, shdmax1d, smcwlt, &
312 & smcdry, smcref, smcmax, sneqv, snoalb1d, snowh, &
313 & snomlt, sncovr, soilw, soilm, ssoil, tsea, th2, tbot, &
314 & xlai, zlvl, swdn, tem, z0, bexpp, xlaip, vegfp, &
315 & mv, sv, alphav, betav, vegftmp, cpinv, hvapi, elocp, &
317 integer :: couple, ice, nsoil, nroot, slope, stype, vtype
318 integer :: i, k, iflag
333 if (land(i) .and. flag_guess(i))
then
334 weasd_old(i) = weasd(i)
335 snwdph_old(i) = snwdph(i)
336 tskin_old(i) = tskin(i)
337 canopy_old(i) = canopy(i)
338 tprcp_old(i) = tprcp(i)
339 srflag_old(i) = srflag(i)
341 smc_old(i,k) = smc(i,k)
342 stc_old(i,k) = stc(i,k)
343 slc_old(i,k) = slc(i,k)
351 if (flag_iter(i) .and. land(i))
then
357 canopy(i) = max(canopy(i), zero)
367 q0(i) = max(q1(i), qmin)
368 theta1(i) = t1(i) * prslki(i)
370 rho(i) = prsl1(i) / (rd*t1(i)*(one+rvrdm1*q0(i)))
371 qs1(i) = fpvs( t1(i) )
372 qs1(i) = max(eps*qs1(i) / (prsl1(i)+epsm1*qs1(i)), qmin)
373 q0(i) = min(qs1(i), q0(i))
375 zsoil(i,k) = zsoil_noah(k)
401 sldpth(1) = - zsoil(i,1)
403 sldpth(k) = zsoil(i,k-1) - zsoil(i,k)
418 solnet = adjvisbmd(i)*(1-albdvis_lnd(i)) &
419 & +adjnirbmd(i)*(1-albdnir_lnd(i)) &
420 & +adjvisdfd(i)*(1-albivis_lnd(i)) &
421 & +adjnirdfd(i)*(1-albinir_lnd(i))
426 prcp = rhoh2o * tprcp(i) / delt
438 dqsdt2 = q2sat * a23m4/(sfctmp-a4)**2
466 if (pertvegf>zero)
then
469 sv = pertvegf*mv*(one-mv)
470 alphav = mv*mv*(one-mv)/(sv*sv)-mv
471 betav = alphav*(one-mv)/mv
474 call ppfbet(vegfp,alphav,betav,iflag,vegftmp)
500 cmc = canopy(i) * 0.001_kind_phys
509 snowh = snwdph(i) * 0.001_kind_phys
510 sneqv = weasd(i) * 0.001_kind_phys
511 if (sneqv /= zero .and. snowh == zero)
then
512 snowh = 10.0_kind_phys * sneqv
515 chx = ch(i) * wind(i)
516 cmx = cm(i) * wind(i)
517 chh(i) = chx * rho(i)
521 z0 = zorl(i) * 0.01_kind_phys
527 rhonewsn = rhonewsn1(i)
532 & ( nsoil, couple, ice, ffrozp, delt, zlvl, sldpth, &
533 & swdn, solnet, lwdn, sfcems, sfcprs, sfctmp, &
534 & sfcspd, prcp, q2, q2sat, dqsdt2, th2, ivegsrc, &
535 & vtype, stype, slope, shdmin1d, alb, snoalb1d, &
536 & rhonewsn, exticeden, &
540 & tbot, cmc, tsea, stsoil, smsoil, slsoil, sneqv, chx, cmx, &
543 & nroot, shdfac, snowh,
albedo, eta, sheat, ec, &
544 & edir, et, ett, esnow, drip, dew, beta, etp, ssoil, &
545 & flx1, flx2, flx3, runoff1, runoff2, runoff3, &
546 & snomlt, sncovr, rc, pc, rsmin, xlai, rcs, rct, rcq, &
547 & rcsoil, soilw, soilm, smcwlt, smcdry, smcref, smcmax, &
572 stm(i) = soilm * 1000.0_kind_phys
573 snohf(i) = flx1 + flx2 + flx3
586 wet1(i) = smsoil(1) / smcmax
589 runoff(i) = runoff1 * 1000.0_kind_phys
590 drain(i) = runoff2 * 1000.0_kind_phys
593 canopy(i) = cmc * 1000.0_kind_phys
594 snwdph(i) = snowh * 1000.0_kind_phys
595 weasd(i) = sneqv * 1000.0_kind_phys
598 zorl(i) = z0*100.0_kind_phys
646 rch(i) = rho(i) * cp * ch(i) * wind(i)
647 qsurf(i) = q1(i) + evap(i) / (elocp * rch(i))
652 hflx(i) = hflx(i) * tem * cpinv
653 evap(i) = evap(i) * tem * hvapi
662 if (flag_guess(i))
then
663 weasd(i) = weasd_old(i)
664 snwdph(i) = snwdph_old(i)
665 tskin(i) = tskin_old(i)
666 canopy(i) = canopy_old(i)
667 tprcp(i) = tprcp_old(i)
668 srflag(i) = srflag_old(i)
671 smc(i,k) = smc_old(i,k)
672 stc(i,k) = stc_old(i,k)
673 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)