PEcAn: Importing Met data from Bondville, IL Ameriflux station
David LeBauer
4/28/2015
Source:vignettes/ameriflux_demo.Rmd
ameriflux_demo.RmdOverview
This is a demonstration of the PEcAn utilities for downloading met data, converting it to the PEcAn-CF format (which is based on the Climate Forecasting conventions and similar to MsTMIP). These variables are described in the PEcAn met data documentation.
We’ll download 12 years of met data from the Bondville
Ameriflux site, which has a SITE_ID of
US-Bo1.
The PEcAn.data.atmosphere source code is in modules/data.atmosphere
and the documentation can be found with either
package?PEcAn.data.atmosphere or in the data.atmosphere
package documentation.
Download Ameriflux data for Bondville
download.Ameriflux(sitename = "US-Bo1", outfolder = "/tmp/",
start_date = "1996-01-01", end_date = "2008-04-10")Convert to PEcAn-CF format
met2CF.Ameriflux(in.path = "/tmp/", in.prefix = "US-Bo1", outfolder = "/tmp/out/",
start_date = "1996-01-01", end_date = "2008-04-10")Concatenate years
NB: this is not required within PEcAn; used here for convenience. See
documentation for NCO
ncrcat function.
system("ncrcat -O -h /tmp/out/US-Bo1.199[6789].nc /tmp/out/US-Bo1.200[12348678].nc /tmp/out/US-Bo11996-2008.nc")Load
Using the load.cfmet convenience function. Ameriflux is
provided at 30 min intervals. If needed at a finer resolution, see
?cfmet.downscale.time (which works with subdaily and daily
data). There is no cfmet.upscale.time function, but would
be straightforward to implement if needed.
bondville.nc <- nc_open("/tmp/out/US-Bo11996-2008.nc")
bondville.cfmet <- load.cfmet(bondville.nc, lat = 40.0061988830566, lon = -88.290397644043, start.date = "1996-08-25", end.date = "2008-04-10")[!is.na(air_pressure)]
library("ggplot2", logical.return = TRUE) || stop("Skipping this chunk because ggplot2 not found")
theme_set(theme_tufte())
p1 <- ggplot() + geom_line(data = bondville.cfmet, aes(x = date, y = surface_downwelling_shortwave_flux_in_air)) + ylab(paste(bondville.nc$var$surface_downwelling_shortwave_flux_in_air$longname, bondville.nc$var$surface_downwelling_shortwave_flux_in_air$units))
p2 <- ggplot() + geom_line(data = bondville.cfmet, aes(x = date, y = surface_downwelling_longwave_flux_in_air)) +
ylab(paste(bondville.nc$var$surface_downwelling_longwave_flux_in_air$longname, bondville.nc$var$surface_downwelling_longwave_flux_in_air$units))
p3 <- ggplot() + geom_line(data = bondville.cfmet, aes(x = date, y = surface_downwelling_photosynthetic_photon_flux_in_air)) + ylab("PAR umol/m2/s")
p4 <- ggplot() + geom_line(data = bondville.cfmet, aes(x = date, y = air_pressure)) +
ylab(paste(bondville.nc$var$air_pressure$longname, bondville.nc$var$air_pressure$units))
p5 <- ggplot() + geom_line(data = bondville.cfmet, aes(x = date, y = air_temperature )) +
ylab(paste(bondville.nc$var$air_temperature$longname, bondville.nc$var$air_temperature$units))
p6 <- ggplot(data = bondville.cfmet, aes(x = date)) +
geom_line(aes(y = wind_speed)) +
#geom_line(aes(y = northward_wind), color = 'blue', alpha = 0.3) +
#geom_line(aes(y = eastward_wind), color = 'red', alpha = 0.3) +
#ggtitle("wind speed: scalar (black) north vector (blue) and east vector (red) ") +
ylab(paste(bondville.nc$var$wind_speed$longname, bondville.nc$var$wind_speed$units))
p7 <- ggplot() + geom_line(data = bondville.cfmet, aes(x = date, y = relative_humidity )) +
ylab(paste(bondville.nc$var$relative_humidity$longname, bondville.nc$var$relative_humidity$units))
p8 <- ggplot() + geom_line(data = bondville.cfmet, aes(x = date, y = specific_humidity )) +
ylab(paste(bondville.nc$var$specific_humidity$longname, bondville.nc$var$specific_humidity$units))
p9 <- ggplot() + geom_line(data = bondville.cfmet, aes(x = date, y = precipitation_flux)) +
ylab(paste(bondville.nc$var$ precipitation_flux$longname, bondville.nc$var$precipitation_flux$units))
plots <- list(p1, p2, p3, p4, p5, p6, p7, p8, p9)Convert to BioCro Model format
To use the data, you can convert these to a model specific format
library(PEcAn.BIOCRO)
# met2model.BioCro uses the following
bondville.biocromet <- cf2biocro(bondville.cfmet, longitude = -88.0, zulu2solarnoon = TRUE)
# write as csv for sharing
write.csv(bondville.biocromet, "../soy/data/bondville_1996-2008.csv", row.names = FALSE)