CCPP Scientific Documentation
v4.1.0
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(in)  bexpp,
real (kind=kind_phys), intent(in)  xlaip,
logical, intent(in)  lheatstrg,
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 
)

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 [32], [99], [47]) to its ancestor, the OSU LSM. The Noah LSM upgrade includes:

  • An increase from two (10, 190 cm thick) to four soil layers (10, 30, 60, 100 cm thick)
  • Addition of frozen soil physics
  • Add glacial ice treatment
  • Two snowpack states (SWE, density)
  • New formulations for infiltration and runoff account for sub-grid variability in precipitation and soil moisture
  • Revised physics of the snowpack and its influence on surface heat fluxes and albedo
  • Higher canopy resistance
  • Spatially varying root depth
  • Surface fluxes weighted by snow cover fraction
  • Improved thermal conduction in soil/snow
  • Improved seasonality of green vegetation cover.
  • Improved evaporation treatment over bare soil and snowpack
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]bexppreal, perturbation of soil type "b" parameter (perturbation)
[in]xlaipreal, perturbation of leave area index (perturbation)
[in]lheatstrglogical, flag for canopy heat storage parameterization
[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

  • Set ice = -1 and green vegetation fraction (shdfac) = 0 for glacial-ice land.
  • Calculate soil layer depth below ground.
    • For ice, set green vegetation fraction (shdfac) = 0. and set sea-ice layers of equal thickness and sum to 3 meters
    • Otherwise, calculate depth (negative) below ground from top skin sfc to bottom of each soil layer.
  • Call redprm() to set the land-surface paramters, including soil-type and veg-type dependent parameters.
  • Calculate perturbated soil type "b" parameter. Following Gehne et al. (2019) [61] , a perturbation of LAI "leaf area index" (xlaip) and a perturbation of the empirical exponent parameter b in the soil hydraulic conductivity calculation (bexpp) are added to account for the uncertainties of LAI and b associated with different vegetation types and soil types using a linear scaling. The spatial pattern of xlaip is drawn from a normal distribution with a standard deviation of 0.25 while makes the LAI between 0 and 8. The spatial pattern of bexpp is drawn from a normal distribution with a standard deviation of 0.4, and is bounded between -1 and 1.
  • Calculate perturbated leaf area index.
  • Initialize precipitation logicals.
  • 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.
    • 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 ([142]).
      • Add subsurface heat flux reduction effect from the overlying green canopy, adapted from section 2.1.2 of [141].
  • 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(), physcons::con_cliq, physcons::con_cp, physcons::con_csol, physcons::con_g, physcons::con_hfus, physcons::con_hvap, physcons::con_pi, physcons::con_rd, physcons::con_sbc, physcons::con_t0c, 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: