estimate_PotNatVeg_composition: Calculate the composition (land cover) representing a...

View source: R/sw_Vegetation.R

estimate_PotNatVeg_compositionR Documentation

Calculate the composition (land cover) representing a potential natural vegetation based on climate relationships

Description

The function returns relative abundance/land cover values that completely cover the surface (i.e., they sum to 1) of a site specified by climate and/or fixed input values.

Usage

estimate_PotNatVeg_composition(
  MAP_mm,
  MAT_C,
  mean_monthly_ppt_mm,
  mean_monthly_Temp_C,
  dailyC4vars = NULL,
  isNorth = TRUE,
  shrub_limit = 0.2,
  fix_succulents = FALSE,
  Succulents_Fraction = NA,
  fix_sumgrasses = FALSE,
  SumGrasses_Fraction = NA,
  fix_annuals = TRUE,
  Annuals_Fraction = 0,
  fix_C4grasses = FALSE,
  C4_Fraction = NA,
  fix_C3grasses = FALSE,
  C3_Fraction = NA,
  fix_shrubs = FALSE,
  Shrubs_Fraction = NA,
  fix_forbs = FALSE,
  Forbs_Fraction = NA,
  fix_trees = TRUE,
  Trees_Fraction = 0,
  fix_BareGround = TRUE,
  BareGround_Fraction = 0,
  fill_empty_with_BareGround = TRUE,
  warn_extrapolation = TRUE
)

Arguments

MAP_mm

A numeric value. Mean annual precipitation in millimeter.

MAT_C

A numeric value. Mean annual temperature in degree Celsius.

mean_monthly_ppt_mm

A numeric vector of length 12. Mean monthly precipitation in millimeter.

mean_monthly_Temp_C

A numeric vector of length 12. Mean monthly temperature in degree Celsius.

dailyC4vars

A named list of length 3 or NULL. If not NULL, then a correction for C4-grasses based on Teeri & Stowe 1976 is applied based on the variables:

Month7th_NSadj_MinTemp_C

Mean minimum temperature of July on the northern hemisphere and January on the southern hemisphere

DegreeDaysAbove65F_NSadj_DaysC

Degree days above 65 F = 18.33 C in units of days x degree Celsius

LengthFreezeFreeGrowingPeriod_NSadj_Days

Mean annual number of days of the longest continuous period where minimum daily temperature remain above freezing

isNorth

A logical value. TRUE for locations on northern hemisphere.

shrub_limit

A numeric value. Default value is 0.2 based on page 1213 of Paruelo & Lauenroth 1996.

fix_succulents

A logical value. If TRUE, then value for the succulent component is fixed at Succulents_Fraction instead of calculated from climatic relationships.

Succulents_Fraction

A numeric value between 0 and 1. NA is treated as if fix_succulents is FALSE.

fix_sumgrasses

A logical value. If TRUE, then the summed values of the three grass types, i.e., annuals, C3, and C4 grasses, is fixed at SumGrasses_Fraction. If they are not fixed themselves, then their values are estimated and scaled to sum to SumGrasses_Fraction.

SumGrasses_Fraction

A numeric value between 0 and 1. NA is treated as if fix_sumgrasses is FALSE.

fix_annuals

A logical value. If TRUE, then value for the annual component is fixed at Annuals_Fraction.

Annuals_Fraction

A numeric value between 0 and 1. Default value is 0.

fix_C4grasses

A logical value. If TRUE, then value for the C4-grass component is fixed at C4_Fraction instead of calculated from climatic relationships.

C4_Fraction

A numeric value between 0 and 1. NA is treated as if fix_C4grasses is FALSE.

fix_C3grasses

A logical value. If TRUE, then value for the C3-grass component is fixed at C3_Fraction instead of calculated from climatic relationships.

C3_Fraction

A numeric value between 0 and 1. NA is treated as if fix_C3grasses is FALSE.

fix_shrubs

A logical value. If TRUE, then value for the shrub component is fixed at Shrubs_Fraction instead of calculated from climatic relationships.

Shrubs_Fraction

A numeric value between 0 and 1. NA is treated as if fix_shrubs is FALSE.

fix_forbs

A logical value. If TRUE, then value for the forb component is fixed at Forbs_Fraction.

Forbs_Fraction

A numeric value between 0 and 1. Default value is 0.

fix_trees

A logical value. If TRUE, then value for the tree component is fixed at Trees_Fraction.

Trees_Fraction

A numeric value between 0 and 1. Default value is 0.

fix_BareGround

A logical value. If TRUE, then value for the bare ground component is fixed at BareGround_Fraction.

BareGround_Fraction

A numeric value between 0 and 1. Default value is 0.

fill_empty_with_BareGround

A logical value. If TRUE, then incomplete land cover is considered (additional) bare-ground. If FALSE, then some hacks are used to "fill in" incomplete land cover with grasses and/or shrubs, and additionally, if fix_BareGround is FALSE with bare-ground.

warn_extrapolation

A logical value. If TRUE, then warnings are issued if climate inputs MAP_mm and/or MAT_C fall outside the range of supported values. See notes.

Value

A list with three named numeric vectors.

Rel_Abundance_L0

A numeric vector of length 8 with relative abundance/cover [0-1] values of land cover types that sum to 1. The names of the 8 types are: Succulents, Forbs, Grasses_C3, Grasses_C4, Grasses_Annuals, Shrubs, Trees, BareGround.

Rel_Abundance_L1

A numeric vector of length 5 with relative abundance/cover [0-1] values of rSOILWAT2 land cover types that sum to 1. The names of the 5 types are: SW_TREES, SW_SHRUBS, SW_FORBS, SW_GRASS, and SW_BAREGROUND.

Grasses

A numeric vector of length 3 with relative abundance/cover [0-1] values of the grass types that sum to 1, if there is any grass cover; otherwise, the values are 0. The names of the 3 sub-types are: Grasses_C3, Grasses_C4, and Grasses_Annuals.

Details

Some of the land cover/vegetation types, i.e., trees, annual grasses, and bare-ground are not estimated from climate relationships; they are either set to 0, or alternatively fixed at the value of the input argument(s).

The remaining vegetation types, i.e., shrubs, C3 grasses, C4 grasses, forbs, and succulents, are estimated from climate relationships using equations developed by Paruelo & Lauenroth 1996, or alternatively fixed at the value of the input argument(s). If values for dailyC4vars are provided, then equations developed by Teeri & Stowe 1976 are used to limit the occurrence of C4 grasses.

The relative abundance values of the the vegetation types that can be estimated and are not fixed by inputs, are estimated in two steps: (i) as if they cover the entire surface; (ii) scaled to the proportion of the surface that is not fixed by inputs.

Notes

The equations developed Paruelo & Lauenroth 1996 are based on sites with MAT from 2 C to 21.2 C and MAP from 117 to 1011 mm. If warn_extrapolation is set to TRUE, then inputs are checked against supported ranges, i.e., if MAT is below 1 C, then it is reset to 1 C with a warning. If other inputs exceed their ranges, then a warning is issued and the code proceeds.

References

Paruelo J.M., Lauenroth W.K. (1996) Relative abundance of plant functional types in grasslands and shrublands of North America. Ecological Applications, 6, 1212-1224.

Teeri J.A., Stowe L.G. (1976) Climatic patterns and the distribution of C4 grasses in North America. Oecologia, 23, 1-12.

Examples

## Load weather dataset from rSOILWAT2
utils::data("weatherData", package = "rSOILWAT2")
clim1 <- calc_SiteClimate(weatherList = weatherData)
clim2 <- calc_SiteClimate(weatherList = weatherData, do_C4vars = TRUE)

## All estimable vegetation types are estimated:
estimate_PotNatVeg_composition(
  MAP_mm = 10 * clim1[["MAP_cm"]],
  MAT_C = clim1[["MAT_C"]],
  mean_monthly_ppt_mm = 10 * clim1[["meanMonthlyPPTcm"]],
  mean_monthly_Temp_C = clim1[["meanMonthlyTempC"]]
)

## Climate is outside supported range with MAT < 0 C:
estimate_PotNatVeg_composition(
  MAP_mm = 10 * clim1[["MAP_cm"]],
  MAT_C = clim1[["MAT_C"]] - clim1[["MAT_C"]],
  mean_monthly_ppt_mm = 10 * clim1[["meanMonthlyPPTcm"]],
  mean_monthly_Temp_C = clim1[["meanMonthlyTempC"]] - clim1[["MAT_C"]]
)

## Some land cover types are fixed and others are estimated, and
## the C4-grass adjustment is used:
estimate_PotNatVeg_composition(
  MAP_mm = 10 * clim2[["MAP_cm"]],
  MAT_C = clim2[["MAT_C"]],
  mean_monthly_ppt_mm = 10 * clim2[["meanMonthlyPPTcm"]],
  mean_monthly_Temp_C = clim2[["meanMonthlyTempC"]],
  dailyC4vars = clim2[["dailyC4vars"]],
  fix_shrubs = TRUE, Shrubs_Fraction = 0.5,
  fix_BareGround = TRUE, BareGround_Fraction = 0.25
)

## Fix total grass cover and annual grass cover,
## but estimate relative proportions of C3 and C4 grasses:
estimate_PotNatVeg_composition(
  MAP_mm = 10 * clim2[["MAP_cm"]],
  MAT_C = clim2[["MAT_C"]],
  mean_monthly_ppt_mm = 10 * clim2[["meanMonthlyPPTcm"]],
  mean_monthly_Temp_C = clim2[["meanMonthlyTempC"]],
  dailyC4vars = clim2[["dailyC4vars"]],
  fix_sumgrasses = TRUE,
  SumGrasses_Fraction = 0.8,
  fix_annuals = TRUE,
  Annuals_Fraction = 0.3
)


## SOILWAT2 uses the same algorithm internally if requested to do so
# Obtain cover values from SOILWAT2 output
swin <- rSOILWAT2::sw_exampleData
swin@prod@veg_method <- 1L
swout <- sw_exec(swin)
tmp <- slot(slot(swout, "BIOMASS"), "Year")
pnvsim <- tmp[1, grep("fCover", colnames(tmp)), drop = TRUE]

# Directly calculate cover values
climex <- calc_SiteClimate(weatherList = get_WeatherHistory(swin))
pnvex <- estimate_PotNatVeg_composition(
  MAP_mm = 10 * climex[["MAP_cm"]],
  MAT_C = climex[["MAT_C"]],
  mean_monthly_ppt_mm = 10 * climex[["meanMonthlyPPTcm"]],
  mean_monthly_Temp_C = climex[["meanMonthlyTempC"]]
)[["Rel_Abundance_L1"]]

# They are identical
identical(pnvsim[["fCover_shrub"]], pnvex[["SW_SHRUB"]])
identical(pnvsim[["fCover_grass"]], pnvex[["SW_GRASS"]])
identical(pnvsim[["fCover_forbs"]], pnvex[["SW_FORBS"]])
identical(pnvsim[["fCover_tree"]], pnvex[["SW_TREES"]])
identical(pnvsim[["fCover_BareGround"]], pnvex[["SW_BAREGROUND"]])



Burke-Lauenroth-Lab/Rsoilwat documentation built on Dec. 9, 2023, 12:41 a.m.