sw_meteo_obtain | R Documentation |
rSOILWAT2
Extract meteorological data from external source and format for rSOILWAT2
sw_meteo_obtain_DayMet(x, start_year, end_year, rawdata = NULL, ...)
sw_meteo_obtain_SCAN(x, start_year, end_year, rawdata = NULL, ...)
x |
Identifying information for the station/location for which meteorological data is requested, see details. |
start_year |
A integer value. The first calendar year of the simulation. |
end_year |
A integer value. The last calendar year of the simulation. |
rawdata |
A data object retrieved previously. |
... |
Additional arguments are ignored. |
A list with the following elements
"metadata"
: site metadata (if available)
"rawdata"
: data as downloaded (or argument rawdata
if provided)
"weatherDF"
: data frame with weather data formatted for rSOILWAT2
"vals_missing"
: logical matrix indicating which weather values in
"weatherDF"
are missing
"desc_rsds"
: solar radiation descriptor (if available)
"use_cloudCoverMonthly"
: flag indicating need for monthly cloud cover
"use_windSpeedMonthly"
: flag indicating need for monthly wind speed
"use_humidityMonthly"
: flag indicating need for monthly humidity
"dailyInputFlags"
: logical vector indicating which weather variables
contain at least some values (see calc_dailyInputFlags()
)
sw_meteo_obtain_DayMet()
uses data from
DayMet ORNL DAAC
via daymetr::download_daymet()
.
The argument x
is a named vector with "longitude"
and "latitude"
in
decimal degrees.
"DayMet"
uses a "noleap"
("365_day"
) calendar which is converted
to a "standard"
calendar (i.e., one with leap days); this results in
missing values on inserted leap days (see code example).
"DayMet"
does not contain wind speed which is a required input.
sw_meteo_obtain_SCAN()
uses data from
USDA-NRCS
SCAN/SNOTEL
stations
via soilDB::fetchSCAN()
.
The argument x
takes a NRCS
SCAN/SNOTEL
station code.
## Example: Daymet weather for "Mccracken Mesa" location
## (see `mm_scan[["metadata"]]`)
if (requireNamespace("curl") && curl::has_internet()) {
mm_dm <- rSOILWAT2::sw_meteo_obtain_DayMet(
x = c(longitude = -109.3378, latitude = 37.44671),
start_year = 2015,
end_year = 2023
)
# Fill in missing values on leap days
mm_dm_wdata <- rSOILWAT2::dbW_fixWeather(mm_dm[["weatherDF"]])
# Prepare a SOILWAT2 simulation
swin <- rSOILWAT2::sw_exampleData
rSOILWAT2::swYears_EndYear(swin) <- 2023
rSOILWAT2::swYears_StartYear(swin) <- 2015
swin@weather@desc_rsds <- mm_dm[["desc_rsds"]]
swin@weather@use_cloudCoverMonthly <- mm_dm[["use_cloudCoverMonthly"]]
swin@weather@use_windSpeedMonthly <- mm_dm[["use_windSpeedMonthly"]]
swin@weather@use_humidityMonthly <- mm_dm[["use_humidityMonthly"]]
swin@weather@dailyInputFlags <- mm_dm[["dailyInputFlags"]]
# Set mean monthly climate values to missing
# (except wind speed which is missing in DayMet)
rSOILWAT2::swCloud_Humidity(swin)[] <- NA_real_
rSOILWAT2::swCloud_WindSpeed(swin)[] <- rep(1.5, times = 12L)
rSOILWAT2::swCloud_SkyCover(swin)[] <- NA_real_
# Obtain atmospheric CO2 concentration
rSOILWAT2::swCarbon_Scenario(swin) <- "CMIP6_historical|CMIP6_SSP119"
rSOILWAT2::swCarbon_CO2ppm(swin) <- rSOILWAT2::lookup_annual_CO2a(
start = 2015,
end = 2023,
name_co2 = rSOILWAT2::swCarbon_Scenario(swin)
)
# Run simulation (after providing remaining inputs, e.g., soils)
swout <- try(
rSOILWAT2::sw_exec(
inputData = swin,
weatherList = mm_dm_wdata[["weatherData"]],
quiet = TRUE
),
silent = TRUE
)
}
## Example: SCAN station "Mccracken Mesa"
if (requireNamespace("curl") && curl::has_internet()) {
mm_scan <- try(
rSOILWAT2::sw_meteo_obtain_SCAN(
x = 2140, # SCAN station code
start_year = 2015,
end_year = 2023
)
)
}
if (
exists("mm_scan") && !inherits(mm_scan, "try-error") &&
exists("mm_dm") &&
requireNamespace("graphics")
) {
vars <- c("Tmax_C", "Tmin_C", "PPT_cm")
par_prev <- graphics::par(mfrow = grDevices::n2mfrow(length(vars)))
for (k in seq_along(vars)) {
graphics::plot(
x = mm_scan[["weatherDF"]][[vars[[k]]]],
y = mm_dm[["weatherDF"]][[vars[[k]]]],
xlab = paste("SCAN", vars[[k]]),
ylab = paste("DayMet", vars[[k]])
)
graphics::abline(a = 0, b = 1, col = "red")
}
graphics::par(par_prev)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.