test_that("monthly_mean()", {
skip_on_cran()
cache <- get_cache()
file <- "SGP_Singapore.486980_IWEC.epw"
path <- file.path(cache, file)
if (file.exists(path)) {
epw <- eplusr::read_epw(path)
epw$add_unit()
d <- epw$data()
expect_s3_class(res1 <- monthly_mean(d, "dry_bulb_temperature"), "data.table")
expect_identical(nrow(res1), 12L)
expect_named(res1, c("month", "val_mean", "val_max", "val_min"))
expect_identical(res1$month, 1L:12L)
expect_s3_class(res1$val_mean, "units")
expect_s3_class(res1$val_max, "units")
expect_s3_class(res1$val_min, "units")
epw$drop_unit()
d <- epw$data()
expect_s3_class(res2 <- monthly_mean(d, "dry_bulb_temperature"), "data.table")
expect_identical(nrow(res2), 12L)
expect_named(res2, c("month", "val_mean", "val_max", "val_min"))
expect_identical(res2$month, 1L:12L)
expect_type(res2$val_mean, "double")
expect_type(res2$val_max, "double")
expect_type(res2$val_min, "double")
}
})
test_that("preprocess_morphing()", {
skip_on_cran()
cache <- get_cache()
path <- file.path(cache, "EC-Earth3.ssp585.tas.fst")
if (file.exists(path)) {
d <- fst::read_fst(path, as.data.table = TRUE)
expect_warning(res <- preprocess_morphing(d, warning = TRUE), "less than a decade")
expect_named(res,
c("activity_drs", "institution_id", "source_id", "experiment_id",
"member_id", "table_id", "lon", "lat", "dist", "units", "value", "month",
"interval"
)
)
expect_identical(nrow(res), 12L)
expect_s3_class(res$interval, "factor")
# can stop if specified years were not found
expect_error(preprocess_morphing(d, years = 2059L:2061L), "does not contain any data")
expect_s3_class(res <- preprocess_morphing(d, years = 2060L, labels = as.factor("2060s")), "data.table")
expect_named(res,
c("activity_drs", "institution_id", "source_id", "experiment_id",
"member_id", "table_id", "lon", "lat", "dist", "units", "value", "month",
"interval"
)
)
expect_identical(nrow(res), 12L)
expect_s3_class(res$interval, "factor")
}
})
test_that("morphing_from_mean()", {
skip_on_cran()
cache <- get_cache()
file <- "EC-Earth3.ssp585.tas.fst"
path <- file.path(cache, file)
epw <- file.path(cache, "SGP_Singapore.486980_IWEC.epw")
if (file.exists(path) && file.exists(epw)) {
data_mean <- fst::read_fst(path, as.data.table = TRUE)
data_epw <- read_epw(epw)$add_unit()$data()
expect_equal(
morphing_from_mean(
"dry_bulb_temperature",
data_epw, data.table(), NULL, NULL,
years = 2060L, labels = NULL,
type = "stretch"
),
data.table()
)
# can use morphing using shift factor
expect_s3_class(class = "data.table",
res <- morphing_from_mean(
"dry_bulb_temperature",
data_epw, data_mean, NULL, NULL,
years = 2060L, labels = "2060s",
type = "shift"
)
)
expect_named(res,
c("activity_drs", "institution_id", "source_id", "experiment_id",
"member_id", "table_id", "lon", "lat", "dist", "interval", "datetime",
"year", "month", "day", "hour", "minute", "dry_bulb_temperature",
"delta", "alpha"
)
)
expect_s3_class(res$dry_bulb_temperature, "units")
expect_s3_class(res$delta, "units")
expect_s3_class(res$alpha, "units")
expect_equal(res$dry_bulb_temperature - data_epw$dry_bulb_temperature, res$delta)
# can use morphing using stretch factor
expect_s3_class(class = "data.table",
res <- morphing_from_mean(
"dry_bulb_temperature",
data_epw, data_mean, NULL, NULL,
years = 2060L, labels = "2060s",
type = "shift"
)
)
expect_named(res,
c("activity_drs", "institution_id", "source_id", "experiment_id",
"member_id", "table_id", "lon", "lat", "dist", "interval", "datetime",
"year", "month", "day", "hour", "minute", "dry_bulb_temperature",
"delta", "alpha"
)
)
expect_s3_class(res$dry_bulb_temperature, "units")
expect_s3_class(res$delta, "units")
expect_s3_class(res$alpha, "units")
# can use morphing using combined factor
expect_s3_class(class = "data.table",
res <- morphing_from_mean(
"dry_bulb_temperature",
data_epw, data_mean, data_mean, data_mean,
years = 2060L, labels = "2060s",
type = "combined"
)
)
expect_named(res,
c("activity_drs", "institution_id", "source_id", "experiment_id",
"member_id", "table_id", "lon", "lat", "dist", "interval", "datetime",
"year", "month", "day", "hour", "minute", "dry_bulb_temperature",
"delta", "alpha"
)
)
expect_s3_class(res$dry_bulb_temperature, "units")
expect_s3_class(res$delta, "units")
expect_s3_class(res$alpha, "units")
# can use morphing using combined factor
expect_s3_class(class = "data.table",
res <- morphing_from_mean(
"dry_bulb_temperature",
data_epw, data_mean, data_mean, data_mean,
years = 2060L, labels = "2060s",
type = "combined"
)
)
expect_named(res,
c("activity_drs", "institution_id", "source_id", "experiment_id",
"member_id", "table_id", "lon", "lat", "dist", "interval", "datetime",
"year", "month", "day", "hour", "minute", "dry_bulb_temperature",
"delta", "alpha"
)
)
expect_s3_class(res$dry_bulb_temperature, "units")
expect_s3_class(res$delta, "units")
expect_s3_class(res$alpha, "units")
# can use morphing using combined factor without max and min values
expect_s3_class(class = "data.table",
res <- morphing_from_mean(
"dry_bulb_temperature",
data_epw, data_mean, NULL, NULL,
years = 2060L, labels = "2060s",
type = "combined"
)
)
expect_named(res,
c("activity_drs", "institution_id", "source_id", "experiment_id",
"member_id", "table_id", "lon", "lat", "dist", "interval", "datetime",
"year", "month", "day", "hour", "minute", "dry_bulb_temperature",
"delta", "alpha"
)
)
expect_s3_class(res$dry_bulb_temperature, "units")
expect_s3_class(res$delta, "units")
expect_s3_class(res$alpha, "units")
# can fallback to "shift" if missing values found in data_min or
# data_max
expect_warning(
res <- morphing_from_mean(
"dry_bulb_temperature",
data_epw, data_mean,
copy(data_mean)[2000L, value := NA], copy(data_mean)[1000L, value := NA],
years = 2060L, labels = "2060s",
type = "combined"
)
)
expect_equal(res$dry_bulb_temperature - data_epw$dry_bulb_temperature, res$delta)
}
})
test_that("morphing_epw()", {
skip_on_cran()
cache <- get_cache()
file <- "EC-Earth3.ssp585.tas.fst"
path <- file.path(cache, file)
epw <- file.path(cache, "SGP_Singapore.486980_IWEC.epw")
if (file.exists(path) && file.exists(epw)) {
data_epw <- read_epw(epw)$add_unit()$data()
data_mean <- fst::read_fst(path, as.data.table = TRUE)
d <- structure(
list(epw = eplusr::read_epw(epw), meta = list(), data = copy(data_mean)),
class = "epw_cmip6_data"
)
# can still process if no data found
d$data[, variable := "tas-1"]
expect_s3_class(res <- morphing_epw(d, 2060L), "epw_cmip6_morphed")
expect_named(res,
c("epw", "tdb", "tdew", "rh", "p", "hor_ir", "glob_rad", "norm_rad",
"diff_rad", "wind", "total_cover", "opaque_cover"
)
)
expect_s3_class(res$epw, "Epw")
expect_identical(res$tdb, data.table())
expect_identical(res$tdew, data.table())
expect_identical(res$rh, data.table())
expect_identical(res$p, data.table())
expect_identical(res$hor_ir, data.table())
expect_identical(res$glob_rad, data.table())
expect_identical(res$norm_rad, data.table())
expect_identical(res$diff_rad, data.table())
expect_identical(res$wind, data.table())
expect_identical(res$total_cover, data.table())
expect_identical(res$opaque_cover, data.table())
d$data[, variable := "tas-1"]
expect_s3_class(res <- morphing_epw(d, 2060L, methods = c(tdb = "shift")), "epw_cmip6_morphed")
expect_named(res,
c("epw", "tdb", "tdew", "rh", "p", "hor_ir", "glob_rad", "norm_rad",
"diff_rad", "wind", "total_cover", "opaque_cover"
)
)
expect_s3_class(res$epw, "Epw")
expect_identical(res$tdb, data.table())
expect_identical(res$tdew, data.table())
expect_identical(res$rh, data.table())
expect_identical(res$p, data.table())
expect_identical(res$hor_ir, data.table())
expect_identical(res$glob_rad, data.table())
expect_identical(res$norm_rad, data.table())
expect_identical(res$diff_rad, data.table())
expect_identical(res$wind, data.table())
expect_identical(res$total_cover, data.table())
expect_identical(res$opaque_cover, data.table())
# can morph tas
d$data[, variable := "tas"]
expect_s3_class(res <- morphing_epw(d, 2060L), "epw_cmip6_morphed")
expect_identical(nrow(res$tdb), 8760L)
expect_identical(nrow(res$tdew), 0L)
# can morph rh
d$data[, `:=`(variable = "hurs", value = 80, units = "%")]
expect_s3_class(res <- morphing_epw(d, 2060L), "epw_cmip6_morphed")
expect_identical(nrow(res$rh), 8760L)
expect_identical(nrow(res$tdew), 0L)
# can calculate tdew
d$data <- rbindlist(list(
data_mean, copy(data_mean)[, `:=`(variable = "hurs", value = 80, units = "%")]
))
expect_s3_class(res <- morphing_epw(d, 2060L), "epw_cmip6_morphed")
expect_identical(nrow(res$tdb), 8760L)
expect_identical(nrow(res$rh), 8760L)
expect_identical(nrow(res$tdew), 8760L)
# can morph pa
d$data <- copy(data_mean)[, `:=`(variable = "psl", value = 101300, units = "Pa")]
expect_s3_class(res <- morphing_epw(d, 2060L), "epw_cmip6_morphed")
expect_identical(nrow(res$p), 8760L)
# can morph hor_ir
d$data <- copy(data_mean)[, `:=`(variable = "rlds", value = 400, units = "W/m^2")]
expect_s3_class(res <- morphing_epw(d, 2060L), "epw_cmip6_morphed")
expect_identical(nrow(res$hor_ir), 8760L)
# can morph global_rad, calculate diff_rad and norm_rad
d$data <- copy(data_mean)[, `:=`(variable = "rsds", value = 300, units = "W/m^2")]
expect_s3_class(res <- morphing_epw(d, 2060L), "epw_cmip6_morphed")
expect_identical(nrow(res$glob_rad), 8760L)
expect_identical(nrow(res$diff_rad), 8760L)
expect_identical(nrow(res$norm_rad), 8760L)
expect_identical(morphing_diff_rad(data_epw, data.table()), data.table())
expect_identical(morphing_norm_rad(data_epw, data.table()), data.table())
# can morph wind speed
d$data <- copy(data_mean)[, `:=`(variable = "sfcWind", value = 1, units = "m/s")]
expect_s3_class(res <- morphing_epw(d, 2060L), "epw_cmip6_morphed")
expect_identical(nrow(res$wind), 8760L)
# can morph total sky cover and opaque sky cover
d$data <- copy(data_mean)[, `:=`(variable = "clt", value = 80, units = "%")]
expect_s3_class(res <- morphing_epw(d, 2060L), "epw_cmip6_morphed")
expect_identical(nrow(res$total_cover), 8760L)
expect_identical(nrow(res$opaque_cover), 8760L)
expect_identical(morphing_total_sky_cover(data_epw, data.table()), data.table())
expect_identical(morphing_opaque_sky_cover(data_epw, data.table()), data.table())
# can issue warnings if alpha values are too big
d$data <- copy(data_mean)[, `:=`(variable = "rsds", value = 1000, units = "W/m^2")]
expect_warning(res <- morphing_epw(d, 2060L), "threshold")
thres_alpha <- getOption("epwshiftr.threshold_alpha")
options("epwshiftr.threshold_alpha" = NULL)
suppressWarnings(expect_warning(res <- morphing_epw(d, 2060L), "threshold"))
options("epwshiftr.threshold_alpha" = -1L)
suppressWarnings(expect_warning(res <- morphing_epw(d, 2060L), "threshold"))
options("epwshiftr.threshold_alpha" = thres_alpha)
}
})
test_that("future_epw()", {
skip_on_cran()
cache <- get_cache()
file <- "EC-Earth3.ssp585.tas.fst"
path <- file.path(cache, file)
epw <- file.path(cache, "SGP_Singapore.486980_IWEC.epw")
if (file.exists(path) && file.exists(epw)) {
data_mean <- fst::read_fst(path, as.data.table = TRUE)
d <- structure(
list(epw = eplusr::read_epw(epw), meta = list(), data = data_mean[0L]),
class = "epw_cmip6_data"
)
# can stop if no data to process
morphed <- morphing_epw(d, 2060L)
expect_error(suppressWarnings(future_epw(morphed)), "No morphed data found")
# can give warnings on missing morphed variables
d$data <- copy(data_mean)[, `:=`(variable = "clt", value = 80, units = "%")]
morphed <- morphing_epw(d, 2060L)
expect_warning(res <- future_epw(morphed, dir = file.path(tempdir(), "future_epw"), overwrite = TRUE))
expect_type(res, "list")
expect_identical(length(res), 1L)
expect_s3_class(res[[1L]], "Epw")
expect_true(file.exists(file.path(
tempdir(), "future_epw",
"ssp585",
"EC-Earth3",
"2060",
"SGP_Singapore.486980_IWEC.ssp585.EC-Earth3.2060.epw"
)))
# can get full summary of future EPWs
expect_warning(res <- future_epw(morphed, dir = file.path(tempdir(), "future_epw"), overwrite = TRUE, separate = FALSE, full = TRUE))
expect_s3_class(res, "data.table")
expect_named(res, c("experiment_id", "source_id", "interval", "epw", "path"))
expect_true(file.exists(file.path(
tempdir(), "future_epw",
"SGP_Singapore.486980_IWEC.ssp585.EC-Earth3.2060.epw"
)))
}
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.