sw_meteo_obtain: Extract meteorological data from external source and format...

sw_meteo_obtainR Documentation

Extract meteorological data from external source and format for rSOILWAT2

Description

Extract meteorological data from external source and format for rSOILWAT2

Usage

sw_meteo_obtain_DayMet(x, start_year, end_year, rawdata = NULL, ...)

sw_meteo_obtain_SCAN(x, start_year, end_year, rawdata = NULL, ...)

Arguments

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.

Value

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())

Details

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.

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.

Examples

## 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
  mm_dm_wdata <- rSOILWAT2::dbW_fixWeather(mm_dm[["weatherDF"]])

  # Prepare weather setup for 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"]]

  # Run simulation (after providing inputs for CO2, etc.)
  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 <- rSOILWAT2::sw_meteo_obtain_SCAN(
    x = 2140, # SCAN station code
    start_year = 2015,
    end_year = 2023
  )
}

if (exists("mm_scan") && 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)
}


Burke-Lauenroth-Lab/rSOILWAT2 documentation built on Dec. 9, 2023, 1:46 a.m.