Learn R Programming

flux (version 0.2-1)

gpp: Model GPP from CO2 closed chamber flux data

Description

Model GPP from $CO_2$ closed chamber flux data under consideration of ecosystem respiration.

Usage

gpp(NEE, PAR, PAR.Temp, Reco.m, allow.offset = FALSE)

Arguments

NEE
Numeric vector with $CO_2$ fluxes obtained under light conditions.
PAR
Numeric vector with PAR readings that where obtained during $CO_2$ flux measurements.
PAR.Temp
Numeric vector with temperature readings that where obtained during $CO_2$ flux measurements. The relevant temperature (e.g., air, soil in -2cm/-5cm/-10cm depth) depends on the ecosystem under study.
Reco.m
Model structure obtained from running reco
allow.offset
Logical. Shall GPP values other than 0 be allowed at PAR = 0? See details.

Value

  • The function returns an object of class gpp. It is a list with the following components.
  • mgThe gpp model. A nls model structure.
  • mrThe Reco model used. A nls model structure.
  • dataA three entry list with data needed for the diagnostic plot containing (1) PAR.Temp – numeric vector with the PAR.Temp values specified in the function call; (2) Reco - numeric vector of corresponding $R_{eco}$ values estimated with the $R_{eco}$ model (Reco.m); (3) offset – Numeric value giving the offset.

encoding

UTF-8

Details

There is a well known relationship between $CO_2$ uptake by plants and photosynthetically active radiation that can be modelled using the Michaelis-Menten kinetic (e.g., Schmitt et al. 2010). This is what the function does. However, in the field net ecosystem exchange (NEE) is measured. NEE largely consists of two components: Ecosystem respiration ($R_{eco}$) and the uptake of $CO_2$ by plants (gross primary production, GPP). Therefore, it is necessary to subtract $R_{eco}$ from the measured NEE to obtain GPP that can be used for the modelling against PAR.

Real $R_{eco}$ at the time of the NEE measurement is typically unkown because neither with closed chambers nor with eddy covariance is it possible to do dark and light measurements at the same time. Therefore, $R_{eco}$ has to be modelled based on dark chamber or nighttime measurements (see (reco). For modelling GPP from NEE chamber measurements with gpp, the function just needs the measured NEE, the associated PAR and PAR.Temperature values and the $R_{eco}$ model (Reco.m) that shall be used for estimating $R_{eco}$ values using the PAR.Temp data. It doesn't matter whether the $R_{eco}$ model covers the same period as the NEE data or is derived from a longer period of time. The latter is often better to get more reliable models.

The Michaelis Menten fit to the GPP/PAR relationship bases on the idea that plants (at least C3 plants) do not take up $CO_2$ when there is no PAR. However, sometimes it happens that the Reco model gives quite unrealistic estimates for $R_{eco}$ during NEE measurements leading to an alleged considerable uptake of $CO_2$ under no or very low light conditions. This in turn leeds to unrealistic and not well fitted models. Therefore, it is possible to correct the offset (default) by not allowing an offset: allow.offset = FALSE. The offset is determined automatically by constructing a linear model using the data points until PAR = 500 and predicting GPP at PAR = 0. The offset is then subtracted from all GPP values and is later automatically added when doing the diagnostic plots.

The start parameters for the non-linear fit (via nls) are derived from the data itself. For alpha (initial slope of the curve) the slope of a linear model of GPP against PAR constructed from the data points until PAR = 500 is used. For GPmax the mean of the five highest GPP values is taken.

It is advisable to test various configurations regarding the $R_{eco}$ model and testing the effect of allowing the offset.

References

Schmitt M, Bahn M, Wohlfahrt G, Tappeiner U, Cernusca A. 2010. Land use affects the net ecosystem CO2 exchange and its components in mountain grasslands. Biogeosciences, 7:2297-2309.

See Also

reco

Examples

Run this code
## load data
data(tt.flux)

## model reco with Arrhenius type model
# extract data and omit estimated fluxes with both the nrmse 
# and the r2 flag set to 0
ttf <- tt.flux[!(tt.flux$CO2.r2.f + tt.flux$CO2.nrmse.f) == 0, ]

# extract table with flux data for reco modeling
ttf4reco <- subset(ttf, kind > 4)

# omit CO2 fluxes below zero
ttf4reco <- ttf4reco[ttf4reco$CO2.flux >= 0,]

# plot reco data
plot(CO2.flux ~ t.air, data=ttf4reco)

# check for the best temperature for reco modelling
temps <- c("t.air", "t.soil2", "t.soil5", "t.soil10")
sapply(temps, function(x) lapply(reco(ttf4reco$CO2.flux, 
ttf4reco[,x], method="arr"), AIC))

# take the temperature in soil 2 cm
reco.m <- reco(ttf4reco$CO2.flux, ttf4reco$t.soil2, method="arr")

# inspect
reco.m

## model gpp
# extract table with flux data for gpp modeling
ttf4gpp <- subset(ttf, kind < 4)

# do a single gpp model for a measurement day using data of spot 2
tmp <- ttf4gpp[(ttf4gpp$date=="2011-05-11") & (ttf4gpp$spot==2),]
gpp.m1 <- gpp(tmp$CO2.flux, tmp$PAR, tmp$t.soil2, reco.m[[1]])
# check diagnostic plot
plot(gpp.m1)

# same for spot 3
tmp <- ttf4gpp[(ttf4gpp$date=="2011-05-11") & (ttf4gpp$spot==3),]
gpp.m2 <- gpp(tmp$CO2.flux, tmp$PAR, tmp$t.soil2, reco.m[[1]])
# check diagnostic plot
plot(gpp.m2)

# same with all three spots
tmp <- ttf4gpp[(ttf4gpp$date=="2011-05-11"),]
gpp.m3 <- gpp(tmp$CO2.flux, tmp$PAR, tmp$t.soil2, reco.m[[1]])
# check diagnostic plot
plot(gpp.m3)

# do a gpp model per date with all spots each
dts <- levels(ttf4gpp$date)
# exclude measurement dates with less then 5 data points
dts <- dts[summary(ttf4gpp$date)>=5]
gpp.mdls <- lapply(dts, function(x) with(ttf4gpp[ttf4gpp$date==x,], 
gpp(CO2.flux, PAR, t.soil2, reco.m[[1]])))
# plot model diagnostic plot into one device
par(mfcol=c(3,5))
lapply(gpp.mdls, plot, single.pane=FALSE)

Run the code above in your browser using DataLab