Learn R Programming

flux (version 0.2-2)

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, ts.NEE = NULL, ts.Reco = NULL, method = 
"Michaelis-Menten", units = "30mins", allow.offset = FALSE, virtual = FALSE, 
start.par = max(PAR), ...)

Arguments

NEE
Numeric vector with $CO_2$ from measurements of $CO_2$ net ecosystem exchange (NEE).
PAR
Numeric vector of mean irradiation during $CO_2$ flux measurements. Can be supplied as photosynthetically active radiation (PAR) or photosynthetic photon flux density (PPFD).
PAR.Temp
Numeric vector of mean recorded temperature readings during $CO_2$ flux measurements. Has to correspond with the particular temperature used in $R_{eco}$ modeling (e.g., air, soil in -2cm/-5cm/-10cm depth).
Reco.m
Model structure obtained from running reco or vector with estimated Reco values. The latter has to contain (at least) the values that are valid at the times of the NEE measurements. Typically the data will res
ts.NEE
POSIXlt vector holding the timestamp of the NEE values. Has to be specified if $R_{eco}$ values instead of an $R_{eco}$ model are given in Reco.m. NEE and Reco values are linked to each other based on their timestamps specified i
ts.Reco
POSIXlt vector holding the timestamp of the $R_{eco}$ values. Has to be specified if $R_{eco}$ values instead of an $R_{eco}$ model are given in Reco.m. The function assumes that this is the case if ts.Reco != NULL.
method
The function knows several equations to model the relationship between gpp and irradiation. At the moment "Michaelis-Menten", "Falge", "Smith", and "Misterlich" are implemented which are all discussed in
units
Character string specifying how ts.NEE shall be rounded. If Reco.m holds values instead of an $R_{eco}$ model structure the NEE and $R_{eco}$ values are matched based on their timestamp after ts.NEE has been rounded
allow.offset
Logical. Shall GPP values other than 0 be allowed at zero irradiation? See details.
virtual
Logical. If TRUE, virtual NEE data are generated that show a typical saturation curve with saturation at mean NEE. Can be used in bulk gpp modeling to allow falling back to a mean model.
start.par
Numeric between 0 and max(PAR). All data points with PAR <= start.par<="" code=""> are used to obtain a start value for alpha via linear regression. Defaults to max(PAR). See details.
...
Any arguments passed to nls which is used internally to do the model fitting.

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

The function models the relationship between $CO_2$ uptake by plants (gross primary production, GPP) and irradiation using one out of 4 methods (Falge et al. 2001). Per default the Michaelis-Menten kinetic (e.g., Schmitt et al. 2010) is used. The following models can be fitted to the data:

$GPP = \frac{GPmax * alpha * PAR}{alpha * PAR + GPmax}$ (Michaelis-Menten)

$GPP = \frac{alpha * PAR}{1 - \frac{PAR}{2000} + \frac{alpha*PAR}{GPmax}}$ (Falge)

$GPP = \frac{GPmax * alpha * PAR}{\sqrt{GPmax^2 + (alpha*par)^2}}$ (Smith)

$GPP = GPmax * (1 - e^{\frac{alpha * PAR}{GPmax})}$ (Misterlich)

with PAR the incoming light (irradiation). Note, that irradiation can be given in PAR or in PPFD although the equation states PAR. GPmax and alpha are the parameters that are fitted. GPmax refers to the maximum gross primary production at saturating or optimum light whereas alpha refers to the ecosystem quantum yield and gives the starting slope of the model.

Closed chamber measurements in the field typically capture net ecosystem exchange (NEE), which is the sum of the two opposing processes ecosystem respiration ($R_{eco}$) and GPP. Therefore, it is necessary to subtract modeled $R_{eco}$ from the measured NEE to obtain GPP that can be used for the modelling against irradiance.

Real $R_{eco}$ at the time of the NEE measurement is typically unkown because dark and light measurements cannot be taken at the same spot 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, gpp just needs measured NEE, the associated irradiance (PAR) and temperature (PAR.Temp) values and the $R_{eco}$ model (Reco.m). The $R_{eco}$ model can derive from a longer period of time than the NEE data, which is often better to get more reliable models.

The Michaelis Menten fit to the GPP/PAR relationship presumes that plants (at least C3 plants) do not take up $CO_2$ when there is no irradiance. However, sometimes the $R_{eco}$ model gives quite unrealistic $R_{eco}$ estimates for the times of NEE measurements leading to an alleged considerable uptake of $CO_2$ under no or very low light conditions. This in turn leads to unrealistic and not well fitted GPP models. Therefore, it is possible to correct the model by not allowing an offset: allow.offset = FALSE (default). The offset is determined automatically by constructing a linear model using the data points until PAR = start.par 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 model) the slope of the linear model of GPP against PAR constructed from the data points until PAR = start.par 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. The offset is not added back to the predicted GPP data but it is returned as part of the output (see value section).

References

Falge E, Baldocchi D, Olson R, Anthoni R, et al. 2001. Gap filling strategies for defensible annual sums of net ecosystem exchange. Agricultural and Forest Meteorology, 107:43-69.

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, fluxx

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 than 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