GMTB Common Community Physics Package (CCPP) Scientific Documentation  Version 1.0
GFS Noah LSM Model

This is the entity of GFS Noah LSM model of physics subroutines. It is a soil/veg/snowpack land-surface model to update soil moisture, soil ice, soil temperature, skin temperature, snowpack water content, snowdepth, and all terms of the surface energy balance and surface water balance (excluding input atmospheric forcings of downward radiation and precipitation ). More...

Detailed Description

The land-surface model component was substantially upgraded from the Oregon State University (OSU) land surface model to EMC's new Noah Land Surface Model (Noah LSM) during the major implementation in the NCEP Global Forecast System (GFS) on May 31, 2005. Forecast System (GFS). The Noah LSM embodies about 10 years of upgrades (see [11]; [50]; [20]) to its ancestor, the OSU LSM. The Noah LSM upgrade includes:

Parameters
[in]nsoilinteger, number of soil layers (>=2 but <=nsold)
[in]coupleinteger, =0:uncoupled (land model only), =1:coupled with parent atmos model
[in]iceininteger, sea-ice flag (=1: sea-ice, =0: land)
[in]ffrozpreal, flag for snow-rain detection (1.=snow, 0.=rain)
[in]dtreal, time step (<3600 sec)
[in]zlvlreal, height abv atmos ground forcing vars ( \(m\))
[in]sldpthreal, thickness of each soil layer ( \(m\)), nsoil
[in]swdnreal, downward SW radiation flux ( \(W/m^2\))
[in]swnetreal, downward SW net (dn-up) flux ( \(W/m^2\))
[in]lwdnreal, downward LW radiation flux ( \(W/m^2\))
[in]sfcemsreal, sfc LW emissivity (fractional)
[in]sfcprsreal, pressure at height zlvl above ground( \(Pa\))
[in]sfctmpreal, air temp at height zlvl above ground ( \(K\))
[in]sfcspdreal, wind speed at height zlvl above ground ( \(m s^{-1}\))
[in]prcpreal, precipitation rate ( \(kgm^{-2}s^{-1}\))
[in]q2real, mixing ratio at hght zlvl above ground ( \(kgkg^{-1}\))
[in]q2satreal, sat mixing ratio at zlvl above ground ( \(kgkg^{-1}\))
[in]dqsdt2real, slope of sat specific humidity curve at t=sfctmp ( \(kgkg^{-1}k^{-1}\))
[in]th2real, air potential temperature at zlvl above ground ( \(K\))
[in]ivegsrcinteger, sfc veg type data source UMD or IGBP
[in]vegtypinteger, vegetation type (integer index)
[in]soiltypinteger, soil type (integer index)
[in]slopetypinteger, class of sfc slope (integer index)
[in]shdminreal, min areal coverage of green veg (fraction)
[in]albreal, background snow-free sfc albedo (fraction)
[in]snoalbreal, max albedo over deep snow (fraction)
[in,out]tbotreal, bottom soil temp ( \(K\)) (local yearly-mean sfc air temp)
[in,out]cmcreal, canopy moisture content ( \(m\))
[in,out]t1real, ground/canopy/snowpack eff skin temp ( \(K\))
[in,out]stcreal, soil temp ( \(K\))
[in,out]smcreal, total soil moisture (vol fraction)
[in,out]sh2oreal, unfrozen soil moisture (vol fraction), note: frozen part = smc-sh2o
[in,out]sneqvreal, water-equivalent snow depth ( \(m\)), note: snow density = snwqv/snowh
[in,out]chreal, sfc exchange coeff for heat & moisture ( \(ms^{-1}\)), note: conductance since it's been mult by wind
[in,out]cmreal, sfc exchange coeff for momentum ( \(ms^{-1}\)), note: conductance since it's been mult by wind
[in,out]z0real, roughness length ( \(m\))
[out]nrootinteger, number of root layers
[out]shdfacreal, aeral coverage of green veg (fraction)
[out]snowhreal, snow depth ( \(m\))
[out]albedoreal, sfc albedo incl snow effect (fraction)
[out]etareal, downward latent heat flux ( \(W/m^2\))
[out]sheatreal, downward sensible heat flux ( \(W/m^2\))
[out]ecreal, canopy water evaporation ( \(W/m^2\))
[out]edirreal, direct soil evaporation ( \(W/m^2\))
[out]etreal, plant transpiration ( \(W/m^2\))
[out]ettreal, total plant transpiration ( \(W/m^2\))
[out]esnowreal, sublimation from snowpack ( \(W/m^2\))
[out]dripreal, through-fall of precip and/or dew in excess of canopy water-holding capacity ( \(m\))
[out]dewreal, dewfall (or frostfall for t<273.15) ( \(m\))
[out]betareal, ratio of actual/potential evap
[out]etpreal, potential evaporation ( \(W/m^2\))
[out]ssoilreal, upward soil heat flux ( \(W/m^2\))
[out]flx1real, precip-snow sfc flux ( \(W/m^2\))
[out]flx2real, freezing rain latent heat flux ( \(W/m^2\))
[out]flx3real, phase-change heat flux from snowmelt ( \(W/m^2\))
[out]runoff1real, surface runoff ( \(ms^{-1}\)) not infiltrating sfc
[out]runoff2real, sub sfc runoff ( \(ms^{-1}\)) (baseflow)
[out]runoff3real, excess of porosity for a given soil layer
[out]snomltreal, snow melt ( \(m\)) (water equivalent)
[out]sncovrreal, fractional snow cover
[out]rcreal, canopy resistance (s/m)
[out]pcreal, plant coeff (fraction) where pc*etp=transpi
[out]rsminreal, minimum canopy resistance (s/m)
[out]xlaireal, leaf area index (dimensionless)
[out]rcsreal, incoming solar rc factor (dimensionless)
[out]rctreal, air temperature rc factor (dimensionless)
[out]rcqreal, atoms vapor press deficit rc factor
[out]rcsoilreal, soil moisture rc factor (dimensionless)
[out]soilwreal, available soil moisture in root zone
[out]soilmreal, total soil column moisture (frozen+unfrozen) ( \(m\))
[out]smcwltreal, wilting point (volumetric)
[out]smcdryreal, dry soil moisture threshold (volumetric)
[out]smcrefreal, soil moisture threshold (volumetric)
[out]smcmaxreal, porosity (sat val of soil mois)

GFS Noah LSM General Algorithm

Functions/Subroutines

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, 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)
 
subroutine alcalc
 This subroutine calculates albedo including snow effect (0 -> 1).
 
subroutine canres
 This subroutine calculates canopy resistance which depends on incoming solar radiation, air temperature, atmospheric water vapor pressure deficit at the lowest model level, and soil moisture (preferably unfrozen soil moisture rather than total).
 
subroutine csnow
 This subroutine calculates snow termal conductivity.
 
subroutine nopac
 This subroutine calculates soil moisture and heat flux values and update soil moisture content and soil heat content values for the case when no snow pack is present.
 
subroutine penman
 This subroutine calculates potential evaporation for the current point. various partial sums/products are also calculated and passed back to the calling routine for later use.
 
subroutine redprm
 This subroutine internally sets default values or optionally read-in via namelist i/o, all soil and vegetation parateters requied for the execusion of the Noah LSM.
 
subroutine sfcdif
 This subroutine calculates surface layer exchange coefficients via iterative process(see [12]).
 
subroutine snfrac
 This subroutine calculates snow fraction (0->1).
 
subroutine snopac
 This subroutine calculates soil moisture and heat flux values and update soil moisture content and soil heat content values for the case when a snow pack is present.
 
subroutine snow_new
 This subroutine calculates snow depth and densitity to account for the new snowfall. new values of snow depth & density returned.
 
subroutine snowz0
 This subroutine calculates total roughness length over snow.
 
subroutine tdfcnd
 This subroutine calculates thermal diffusivity and conductivity of the soil for a given point and time.
 
subroutine evapo
 This subroutine calculates soil moisture flux. The soil moisture content (smc - a per unit volume measurement) is a dependent variable that is updated with prognostic equations. The canopy moisture content (cmc) is also updated. Frozen ground version: new states added: sh2o, and frozen ground correction factor, frzfact and paramter slope.
 
subroutine shflx
 This subroutine updates the temperature state of the soil column based on the thermal diffusion equation and update the frozen soil moisture content based on the temperature.
 
subroutine smflx
 This subroutine calculates soil moisture flux. The soil moisture content (smc - a per unit vulume measurement) is a dependent variable that is updated with prognostic equations. The canopy moisture content (cmc) is also updated. Frozen ground version: new states added: sh2o and frozen ground correction factor, frzx and parameter slope.
 
subroutine snowpack
 This subroutine calculates compaction of a snowpack under conditions of increasing snow density, as obtained from an approximate solution of E. Anderson's differential equation (3.29),NOAA technical report NWS 19, by Victor Koren, 03/25/95. subroutine will return new values of snowh and sndens .
 
subroutine devap
 This subrtouine calculates direct soil evaporation.
 
subroutine frh2o
 This subroutine calculates amount of supercooled liquid soil water content if temperature is below 273.15K (t0). It requires Newton-type iteration to solve the nonlinear implicit equation given in eqn 17 of [50]. More...
 
subroutine hrt
 This subroutine calculates the right hand side of the time tendency term of the soil thermal diffusion equation. Also to compute (prepare) the matrix coefficients for the tri-diagonal matrix of the implicit time scheme.
 
subroutine hrtice
 This subroutine calculates the right hand side of the time tendency term of the soil thermal diffusion equation for sea-ice (ice = 1) or glacial-ice (ice).
 
subroutine hstep
 This subroutine calculates/updates the soil temperature field.
 
subroutine rosr12
 This subroutine inverts (solve) the tri-diagonal matrix problem.
 
subroutine snksrc
 This subroutine calculates sink/source term of the termal diffusion equation.
 
subroutine srt
 This subroutine calculates the right hand side of the time tendency term of the soil water diffusion equation. Also to compute (prepare) the matrix coefficients for the tri-diagonal matrix of the implicit time scheme.
 
subroutine sstep
 This subroutine calculates/updates soil moisture content values and canopy moisture content values.
 
subroutine tbnd
 This subroutine calculates temperature on the boundary of the layer by interpolation of the middle layer temperatures.
 
subroutine tmpavg
 This subroutine calculates soil layer average temperature (tavg) in freezing/thawing layer using up, down, and middle layer temperature (tup, tdn, tm), where tup is at top boundary of layer, tdn is at bottom boundary of layer. tm is layer prognostic state temperature.
 
subroutine transp
 This subroutine calculates transpiration for the veg class.
 
subroutine wdfcnd
 This subroutine calculates soil water diffusivity and soil hydraulic conductivity.
 

Function/Subroutine Documentation

subroutine gfssflx::frh2o ( )

New version (June 2001): much faster and more accurate Newton iteration achieved by first taking log of eqn cited above – less than 4 (typically 1 or 2) iterations achieves convergence. Also, explicit 1-step solution option for special case of paramter ck=0, which reduces the orginal implicit equation to a simpler explicit form, known as the "flerchinger eqn". Improved handling of solution in the limit of freezing point temperature t0.

Referenced by snksrc().

subroutine gfssflx ( integer, intent(in)  nsoil,
integer, intent(in)  couple,
integer, intent(in)  icein,
real (kind=kind_phys), intent(in)  ffrozp,
real (kind=kind_phys), intent(in)  dt,
real (kind=kind_phys), intent(in)  zlvl,
real (kind=kind_phys), dimension(nsoil), intent(in)  sldpth,
real (kind=kind_phys), intent(in)  swdn,
real (kind=kind_phys), intent(in)  swnet,
real (kind=kind_phys), intent(in)  lwdn,
real (kind=kind_phys), intent(in)  sfcems,
real (kind=kind_phys), intent(in)  sfcprs,
real (kind=kind_phys), intent(in)  sfctmp,
real (kind=kind_phys), intent(in)  sfcspd,
real (kind=kind_phys), intent(in)  prcp,
real (kind=kind_phys), intent(in)  q2,
real (kind=kind_phys), intent(in)  q2sat,
real (kind=kind_phys), intent(in)  dqsdt2,
real (kind=kind_phys), intent(in)  th2,
integer, intent(in)  ivegsrc,
integer, intent(in)  vegtyp,
integer, intent(in)  soiltyp,
integer, intent(in)  slopetyp,
real (kind=kind_phys), intent(in)  shdmin,
real (kind=kind_phys), intent(in)  alb,
real (kind=kind_phys), intent(in)  snoalb,
real (kind=kind_phys), intent(inout)  tbot,
real (kind=kind_phys), intent(inout)  cmc,
real (kind=kind_phys), intent(inout)  t1,
real (kind=kind_phys), dimension(nsoil), intent(inout)  stc,
real (kind=kind_phys), dimension(nsoil), intent(inout)  smc,
real (kind=kind_phys), dimension(nsoil), intent(inout)  sh2o,
real (kind=kind_phys), intent(inout)  sneqv,
real (kind=kind_phys), intent(inout)  ch,
real (kind=kind_phys), intent(inout)  cm,
real (kind=kind_phys)  z0,
integer, intent(out)  nroot,
real (kind=kind_phys), intent(out)  shdfac,
real (kind=kind_phys), intent(out)  snowh,
real (kind=kind_phys), intent(out)  albedo,
real (kind=kind_phys), intent(out)  eta,
real (kind=kind_phys), intent(out)  sheat,
real (kind=kind_phys), intent(out)  ec,
real (kind=kind_phys), intent(out)  edir,
real (kind=kind_phys), dimension(nsoil), intent(out)  et,
real (kind=kind_phys), intent(out)  ett,
real (kind=kind_phys), intent(out)  esnow,
real (kind=kind_phys), intent(out)  drip,
real (kind=kind_phys), intent(out)  dew,
real (kind=kind_phys), intent(out)  beta,
real (kind=kind_phys), intent(out)  etp,
real (kind=kind_phys), intent(out)  ssoil,
real (kind=kind_phys), intent(out)  flx1,
real (kind=kind_phys), intent(out)  flx2,
real (kind=kind_phys), intent(out)  flx3,
real (kind=kind_phys), intent(out)  runoff1,
real (kind=kind_phys), intent(out)  runoff2,
real (kind=kind_phys), intent(out)  runoff3,
real (kind=kind_phys), intent(out)  snomlt,
real (kind=kind_phys), intent(out)  sncovr,
real (kind=kind_phys), intent(out)  rc,
real (kind=kind_phys), intent(out)  pc,
real (kind=kind_phys), intent(out)  rsmin,
real (kind=kind_phys), intent(out)  xlai,
real (kind=kind_phys), intent(out)  rcs,
real (kind=kind_phys), intent(out)  rct,
real (kind=kind_phys), intent(out)  rcq,
real (kind=kind_phys), intent(out)  rcsoil,
real (kind=kind_phys), intent(out)  soilw,
real (kind=kind_phys), intent(out)  soilm,
real (kind=kind_phys), intent(out)  smcwlt,
real (kind=kind_phys), intent(out)  smcdry,
real (kind=kind_phys), intent(out)  smcref,
real (kind=kind_phys), intent(out)  smcmax 
)
  • For open-sea, sea-ice and glacial-ice cases, sflx() should not have been called (set green vegetation fraction (shdfac) =0.)
  • Calculate soil layer depth below ground (sigin of zsoil is negative).
  • Call redprm() to set the land-surface paramters, including soil-type and veg-type dependent parameters.
  • Over sea-ice or glacial-ice, if water-equivalent snow depth (sneqv) below threshold lower bound (0.01 m for sea-ice, 0.10 m for glacial-ice), then set at lower bound and store the source increment in subsurface runoff/baseflow (runoff2).
  • For sea-ice and glacial-ice cases, set smc and sh2o values = 1.0 as a flag for non-soil medium.
  • If input snowpack (sneqv) is nonzero, then call csnow() to compute snow density (sndens) and snow thermal conductivity (sncond).
  • Determine if it's precipitating and what kind of precipitation it is. if it's precipitating and the air temperature is colder than \(0^oC\), it's snowing! if it's precipitating and the air temperature is warmer than \(0^oC\), but the ground temperature is colder than \(0^oC\), freezing rain is presumed to be falling.
  • If either precipitation flag (snowng, frzgra) is set as true:
    • Since all precip is added to snowpack, no precip infiltrates into the soil so that prcp1 is set to zero.
    • Call snow_new() to update snow density based on new snowfall, using old and new snow.
    • Call csnow() to update snow thermal conductivity.
  • If precipitation is liquid (rain), hence save in the precip variable that later can wholely or partially infiltrate the soil (along with any canopy "drip" added to this later).
  • Determine snowcover fraction and albedo fraction over sea-ice, glacial-ice, and land. For nonzero snow depth over land case:
    • Call snfrac() to calculate snow fraction cover.
    • Call alcalc() to calculate surface albedo modification due to snowdepth state.
  • Calculate thermal diffusivity (df1):
    • For sea-ice case and glacial-ice case, this is constant( \(df1=2.2\)).
    • For non-glacial land case, call tdfcnd() to calculate the thermal diffusivity of top soil layer ([69]).
      • For IGBP/urban, \(df1=3.24\).
      • Add subsurface heat flux reduction effect from the overlying green canopy, adapted from section 2.1.2 of [68].
  • Calculate subsurface heat flux, ssoil, from final thermal diffusivity of surface mediums,df1 above, and skin temperature and top mid-layer soil temperature.
  • For uncoupled mode, call snowz0() to calculate surface roughness (z0) over snowpack using snow condition from the previous timestep.
  • Calculate virtual temps and virtual potential temps needed by subroutines sfcdif and penman.
  • Calculate the total downward radiation (fdown) = net solar (swnet) + downward longwave (lwdn) as input of penman() and other surface energy budget calculations.
  • Call penman() to calculate potential evaporation (etp), and other partial products and sums for later calculations.
  • Call canres() to calculate the canopy resistance and convert it into pc if nonzero greenness fraction.
  • Now decide major pathway branch to take depending on whether snowpack exists or not:
    • For no snowpack is present, call nopac() to calculate soil moisture and heat flux values and update soil moisture contant and soil heat content values.
    • For a snowpack is present, call snopac().
  • Noah LSM post-processing:
    • Calculate sensible heat (h) for return to parent model.
    • Convert units and/or sign of total evap (eta), potential evap (etp), subsurface heat flux (s), and runoffs for what parent model expects.
    • Convert the sign of soil heat flux so that:
      • ssoil>0: warm the surface (night time)
      • ssoil<0: cool the surface (day time)
    • For the case of land (but not glacial-ice): convert runoff3 (internal layer runoff from supersat) from \(m\) to \(ms^-1\) and add to subsurface runoff/baseflow (runoff2). runoff2 is already a rate at this point.
    • For the case of sea-ice (ice=1) or glacial-ice (ice=-1), add any snowmelt directly to surface runoff (runoff1) since there is no soil medium, and thus no call to subroutine smflx (for soil moisture tendency).
    • Calculate total column soil moisture in meters (soilm) and root-zone soil moisture availability (fraction) relative to porosity/saturation.

References alcalc(), canres(), csnow(), nopac(), penman(), redprm(), sfcdif(), snfrac(), snopac(), snow_new(), snowz0(), and tdfcnd().

Referenced by lsm_noah::lsm_noah_run().

Here is the call graph for this function: